How to parse nested JSON data structure

23,366

Solution 1

From the top-level JToken, you can use SelectToken() to navigate to the JArray that has the data you are interested in:

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

From there you can process the JArray as you normally would:

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

Same thing for the women array, except the SelectToken() path would be people[1].women.

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

Solution 2

Use the http://json2csharp.com/ It generates the classes. I can't copy it, because you put here as a picture, not text. For the array you have to create other class. In your case you will have a People class that contains Men[] and Women[] arrays. The Men and Women classes contain an another array, which contains the Id, Name, Age. I develop a similar app, and I use the Newtonsoft Json. It works perfectly with the arrays as well.

Solution 3

Use Json.net

You can add it via nuget. Here's a good guide to nested json parsing

Share:
23,366
Shagufta Oliveyu Methwani
Author by

Shagufta Oliveyu Methwani

Updated on November 20, 2020

Comments

  • Shagufta Oliveyu Methwani
    Shagufta Oliveyu Methwani over 3 years

    In a Windows Phone app I need to parse JSON data. I am able to get the values for keys which aren't nested. But if the JSON has arrays inside arrays, then how do I extract values from the JSON file?

    In the past what I did was parse the JSON into a JArray object, then from the JToken I got the value of a specified string key.

    In the JSON below, people has men and women, and men itself has many men with different IDs. So if I have this complete thing as a JSON string, how do I print the value of the ID of a particular man? I could have converted into JArray and access indexed values if there were no nested arrays here, but how to do it now?

    Here is my 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
                    }
                ]
            }
        ]
    }
    
  • Lonefish
    Lonefish over 7 years
    Handy little site!
  • Abhishek
    Abhishek over 6 years
    This was the most helpful parsing technique I got :) Thanks mate
  • wueli
    wueli over 3 years
    Same here. You are a savior! So far, this is the only way to "lazily" parse JSONs in C# that worked for me.