使用System.Json迭代JSON

时间:2013-05-02 13:11:26

标签: c# json .net-4.5

我正在探索.NET 4.5 System.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)

}

}

任何想法?

3 个答案:

答案 0 :(得分:5)

由于接受的答案对我没有多大帮助,因为它的一个典型用法“使用这个lib更好!”答案我想出来了。

是,

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
}

答案 1 :(得分:-2)

使用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"]);

答案 2 :(得分:-4)

对于那个使用json.net库,它比system.json本身好得多

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

然后在你的对象列表中使用带有linq的foreach

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

和json的对象

 string json2Send = await JsonConvert.SerializeObjectAsync(urclassobject);