Parsing a JSON array using Json.Net
Solution 1
You can get at the data values like this:
string json = @"
[
{ ""General"" : ""At this time we do not have any frequent support requests."" },
{ ""Support"" : ""For support inquires, please see our support page."" }
]";
JArray a = JArray.Parse(json);
foreach (JObject o in a.Children<JObject>())
{
foreach (JProperty p in o.Properties())
{
string name = p.Name;
string value = (string)p.Value;
Console.WriteLine(name + " -- " + value);
}
}
Fiddle: https://dotnetfiddle.net/uox4Vt
Solution 2
I know this is about Json.NET but times are a-changing so if anybody stumbles here while using .NET Core/5+ System.Text.Json please don't despair because Try the new System.Text.Json APIs from .NET Blog show an example of this.
[ { "date": "2013-01-07T00:00:00Z", "temp": 23, }, { "date": "2013-01-08T00:00:00Z", "temp": 28, }, { "date": "2013-01-14T00:00:00Z", "temp": 8, }, ]
...
using (JsonDocument document = JsonDocument.Parse(json, options)) { int sumOfAllTemperatures = 0; int count = 0; foreach (JsonElement element in document.RootElement.EnumerateArray()) { DateTimeOffset date = element.GetProperty("date").GetDateTimeOffset(); (...)
Solution 3
Use Manatee.Json https://github.com/gregsdennis/Manatee.Json/wiki/Usage
And you can convert the entire object to a string, filename.json is expected to be located in documents folder.
var text = File.ReadAllText("filename.json");
var json = JsonValue.Parse(text);
while (JsonValue.Null != null)
{
Console.WriteLine(json.ToString());
}
Console.ReadLine();
johngeek
Updated on July 09, 2022Comments
-
johngeek almost 2 years
I'm working with Json.Net to parse an array. What I'm trying to do is to pull the name/value pairs out of the array and assign them to specific variables while parsing the JObject.
Here's what I've got in the array:
[ { "General": "At this time we do not have any frequent support requests." }, { "Support": "For support inquires, please see our support page." } ]
And here's what I've got in the C#:
WebRequest objRequest = HttpWebRequest.Create(dest); WebResponse objResponse = objRequest.GetResponse(); using (StreamReader reader = new StreamReader(objResponse.GetResponseStream())) { string json = reader.ReadToEnd(); JArray a = JArray.Parse(json); //Here's where I'm stumped }
I'm fairly new to JSON and Json.Net, so it might be a basic solution for someone else. I basically just need to assign the name/value pairs in a foreach loop so that I can output the data on the front-end. Has anyone done this before?