使用Json.Net解析JSON数组

60

我正在使用Json.Net解析一个数组。我想要做的是在解析JObject时从数组中提取名称/值对并将它们分配给特定变量。

以下是我在数组中拥有的内容:

[
  {
    "General": "At this time we do not have any frequent support requests."
  },
  {
    "Support": "For support inquires, please see our support page."
  }
]

这是我在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

}

我对JSON和Json.Net相当新,所以对于其他人来说可能是一个基本的解决方案。我基本上只需要在foreach循环中分配名称/值对,以便我可以在前端输出数据。有人做过这个吗?

3个回答

133
你可以像这样获取数据值:
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


4
你很棒!这就是我需要的。 - johngeek
先生,您能告诉我如何获取/读取响应中的所有数据吗?我的值是“closed”,我的响应作为列表有80个值。我该如何访问这些值?请帮帮我。 - Mustafa Demir

1

使用Manatee.Jsonhttps://github.com/gregsdennis/Manatee.Json/wiki/Usage

你可以将整个对象转换为字符串,filename.json应该位于文档文件夹中。

        var text = File.ReadAllText("filename.json");
        var json = JsonValue.Parse(text);

        while (JsonValue.Null != null)
        {
            Console.WriteLine(json.ToString());

        }
        Console.ReadLine();

我已将我的文档迁移到了GitHub Pages:https://gregsdennis.github.io/Manatee.Json/usage/getting-started.html - gregsdennis

1

我知道这篇文章是关于Json.NET的,但是时代在变化,如果有人在使用.NET Core/5+ System.Text.Json时偶然遇到这里,请不要绝望,因为.NET Blog中介绍了新的System.Text.Json API,其中提供了一个示例。

[
   {
       "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();
       (...)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接