57

我正在使用 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 循环中分配名称/值对,以便我可以在前端输出数据。有没有人这样做过?

4

3 回答 3

129

您可以像这样获取数据值:

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);
    }
}

小提琴:https ://dotnetfiddle.net/uox4Vt

于 2013-03-31T04:58:42.730 回答
1

使用 Manatee.Json https://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();
于 2018-04-20T18:42:11.237 回答
1

我知道这是关于 Json.NET,但时代在变,所以如果有人在使用 .NET Core/5+ System.Text.Json 时在这里绊倒,请不要绝望,因为 尝试来自 .NET的新 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();
       (...)
于 2021-04-09T13:11:35.487 回答