How to parse nested JSON data structure
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
Shagufta Oliveyu Methwani
Updated on November 20, 2020Comments
-
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
hasmen
andwomen
, andmen
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 over 7 yearsHandy little site!
-
Abhishek over 6 yearsThis was the most helpful parsing technique I got :) Thanks mate
-
wueli over 3 yearsSame here. You are a savior! So far, this is the only way to "lazily" parse JSONs in C# that worked for me.