如何在jquery中创建字典的JSON数组

How to create a JSON array of dictionaries in jquery?

本文关键字:字典 JSON 数组 创建 jquery      更新时间:2023-09-26

我在html中有一个树视图结构。它将只有节点和子节点。它不能有其他子级别。这个树视图的一个特点是用户可以重新排列节点和子节点。

当用户保存它时,我会让它向我的c#页面发送一个JSON对象,在服务器中它会读取新的顺序并保存它。顺序由JSON对象中对象的顺序决定。

我认为JSON对象将如下所示(示例):

[ {id: 4, items: [5, 6, 7]}, {id: 8, items: [9, 10, 11, 12, ...]}, ... ]

因此,它将是一系列字典。对于每个字典,它将有两个键,id将是节点的id号,items将是子节点的id的数组。

重要的是,顺序与我添加到数组中的顺序相同,这样当我遍历它们时,插入它们时的顺序仍然相同。如果它像一本字典,那么这就不是真的了。

我确信我可以使用jquery创建这个字典数组。但是如何将其转换为JSON对象呢?这可能吗?

在c#中,我怎么能读到这个?

_真的没有发现问题。如果您使用的是jQuery,那么您使用的就是Javascript。JSON对象是Javascript对象,因此以下内容在jQuery中有效。它将把对象序列化为一个字符串。

var data = [ {id: 4, items: [5, 6, 7]}, {id: 8, items: [9, 10, 11, 12, ...]}, ... ];
$.post({ 
     data: data,
     // ...
}); 

如果需要字符串,JSON.Stringify()会将对象转换为字符串。(我没有意识到它是Javascript的原生版本)。自从我一直在使用jQueryajax以来,我从来没有这么做过。

在C#中解析这些数据的一种简单方法是使用JSON.Net等库。您可以解析JSON字符串并遍历它,而不必将您必须的JSON结构实际镜像到实际的C#类,但是这对大量JSON会很有帮助。

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
static void Main(string[] args)
{
    string json = "{ items: [ {id: 4, items: [5, 6, 7]}, 
          {id: 8, items: [9, 10, 11, 12]}, {id: 5, items: [9, 10, 11, 12]} ] }";
    JToken root = JToken.Parse(json);
    JToken items = root["items"];
    var results = from element in items
                  select new
                  {
                     Id = element["id"].Value<int>(),
                     Items = element["items"].Select(x => x.Value<int>())
                  };
    foreach (var r in results)
    {
        Console.WriteLine("Id: {0}, Items: {1}", r.Id, string.Join(", ", r.Items));
    }
}

打印到控制台:

Id: 4, Items: 5, 6, 7
Id: 8, Items: 9, 10, 11, 12
Id: 5, Items: 9, 10, 11, 12

我喜欢使用的另一个方便的实用程序是Json2C#,它为我提供了基础。但我提供的示例向您展示了一种轻量级、快速的方法,可以在发送HTTPPost请求后检索数据。

命名空间

System.Web.Script.Serialization;

问题1

但是如何将其转换为JSON对象呢?这可能吗?

回答

JavaScriptSerializer jss = new JavaScriptSerializer();
var jsonObjList = jss .Serialize(objList);

问题2

在c#中,我怎么能读到这个?

回答

型号

public class Object1
{
  public int id {get; set;}
  public List<int> items {get; set;}
}

逻辑

string jsonData = @"[ {id: 4, items: [5, 6, 7]}, {id: 8, items: [9, 10, 11, 12, ...]}, ... ]";
JavaScriptSerializer jss = new JavaScriptSerializer();
var objList = jss.Deserialize<List<Object1 >>(jsonData);