5

我正在探索 .NET 4.5System.Json库的功能,但没有太多文档,而且由于流行的 JSON.NET 库,搜索起来非常棘手。

我基本上想知道,例如,我将如何循环一些 JSON:

{ "People": { "Simon" : { Age: 25 }, "Steve" : { Age: 15 } } }

我有一个字符串中的 JSON,我想遍历并显示每个人的年龄。

所以首先我会做:

var jsonObject = JsonObject.Parse(myString);

但后来我不知道下一步该做什么。我很惊讶 parse 方法返回的是 JsonValue 而不是 JsonObject。

我真正想做的是:

foreach (var child in jsonObject.Children)
{
  if (child.name == "People")
{
 // another foreach to loop over the people
 // get their name and age, eg. person.Name and person.Children.Age (LINQ this or something)

}

}

有任何想法吗?

4

3 回答 3

9

由于接受的答案对我没有太大帮助,因为它的典型用途之一是“更好地使用这个库!” 答案我想通了。

是的,

JsonObject.Parse(myJsonString);

返回一个 JsonValue 对象,它是 System.Json 中所有 Json* 类的基类。当您调用 JsonObject.Parse(..) 时,JsonValue.Parse() 确实因为继承而被调用。

迭代一个 JsonObject 你可以使用:

var jsonObject = JsonValue.parse(jsonString);

foreach (KeyValuePair<string, JsonValue> value in jsonObject)
{
    Console.WriteLine("key:" + value.Key);
    Console.WriteLine("value:" + value.Value);
}

如果它是一个 JsonArray,我没有尝试过这是否也有效,但如果它是一个 JsonArray,那么你可能想用一个经典的 i 来做到这一点:

for (var i = 0; i < jsonObject.Count; i++)
{
    Console.WriteLine("value:" + jsonObject[i]);
}

如果你不知道它是一个数组还是一个对象,那么你可能会先检查一下

if (jsonObject.GetType() == typeof JsonObject){
    //Iterate like an object 
}else if (jsonObject.GetType() == typeof JsonArray){
    //iterate like an array
}
于 2018-03-29T13:02:27.697 回答
-3

使用Json.Net和一些 Linq

string json = @"{ ""People"": { ""Simon"" : { Age: 25 }, ""Steve"" : { Age: 15 } } }";

var people =  JsonConvert.DeserializeObject<JObject>(json)["People"];

var dict = people.Children()
                 .Cast<JProperty>()
                 .ToDictionary(p => p.Name, p => p.Value["Age"]);
于 2013-05-02T13:36:49.827 回答
-5

为此请使用json.net库,它比 system.json 本身要好得多

urclassobj = await JsonConvert.DeserializeObjectAsync<urclass>(json string)

然后在你的对象列表上使用 foreach 和 linq

 foreach(var details in urclassobj
                        .Select((id) => new { id= id})
                        )
 {
   Console.WriteLine("{0}", details.id);
  } 

而对于 json 的对象

 string json2Send = await JsonConvert.SerializeObjectAsync(urclassobject);
于 2013-05-02T13:24:07.700 回答