如何解析嵌套的JSON数据结构

时间:2014-11-18 10:56:41

标签: c# json json.net windows-phone-8.1

在Windows Phone应用程序中,我需要解析JSON数据。我能够获得没有嵌套的键的值。但是如果JSON在数组中有数组,那么如何从JSON文件中提取值?

过去我所做的是将JSON解析为JArray对象,然后从JToken获取指定字符串键的值。

在下面的JSON中,peoplemenwomen,而men本身有很多不同身份的人。因此,如果我将这个完整的东西作为JSON字符串,我如何打印特定人的ID的值?如果这里没有嵌套数组,我可以转换成JArray并访问索引值,但现在该怎么做?

这是我的JSON:

{
    "people": [
        {
            "men": [
                {
                    "id": 0,
                    "name": "alex",
                    "age": 25
                },
                {
                    "id": 1,
                    "name": "bob",
                    "age": 26
                },
                {
                    "id": 2,
                    "name": "charlie",
                    "age": 27
                }
            ]
        },
        {
            "women": [
                {
                    "id": 0,
                    "name": "alexys",
                    "age": 25
                },
                {
                    "id": 1,
                    "name": "bethany",
                    "age": 26
                },
                {
                    "id": 2,
                    "name": "catherine",
                    "age": 27
                }
            ]
        }
    ]
}

3 个答案:

答案 0 :(得分:10)

在顶级JToken,您可以使用SelectToken()导航至包含您感兴趣的数据的JArray

JToken token = JToken.Parse(json);
JArray men = (JArray)token.SelectToken("people[0].men");

从那里你可以像往常一样处理JArray

foreach (JToken m in men)
{
    Console.WriteLine("id: " + m["id"]);
    Console.WriteLine("name: " + m["name"]);
    Console.WriteLine("age: " + m["age"]);
    Console.WriteLine();
}

除了SelectToken()路径为people[1].women之外,女性数组也是如此。

DEMO: https://dotnetfiddle.net/7BoiUO

答案 1 :(得分:2)

使用http://json2csharp.com/ 它生成类。我无法复制它,因为你把它放在这里作为图片,而不是文本。 对于数组,您必须创建其他类。在您的情况下,您将拥有一个包含Men []和Women []数组的People类。 Men and Women类包含另一个数组,其中包含Id,Name,Age。 我开发了一个类似的应用程序,我使用了Newtonsoft Json。它也适用于数组。

答案 2 :(得分:1)

使用Json.net

您可以通过nuget添加它。 这是nested json parsing

的一个很好的指南