【问题标题】:How to parse JSON file with different node如何解析具有不同节点的 JSON 文件
【发布时间】:2015-06-02 12:07:55
【问题描述】:

我在 C# 中工作,在那里我创建了一个小项目。在项目中我正在解析一个 json 文件。我只是想问一下我可以解析或使用 json 文件吗.....

JSON 文件

{
"Nodes": [
      {
        "Number of Location":"4",
      },
      {
        "longitude": "22.3 ",
        "latitude": "45.3",
        "Demand": "5"
      },
      {
        "longitude": "26.3 ",
        "latitude": "46.3",
        "Demand": "6"
      },
      {
        "longitude": "35.1 ",
        "latitude": "48.2",
        "Demand": "2"
      }
]
}

C# 代码

 string path = null;
 Console.WriteLine("enter the path where order matrix is loacated");
 path = Console.ReadLine();
 System.IO.StreamReader myFile = new System.IO.StreamReader(path);
 string myString = myFile.ReadToEnd();
 JObject o = JObject.Parse(myString);
 Console.WriteLine(o["Nodes"][0]["Number of Location"]);
 for (int i = 0; i < 5; i++)
 {
     Console.WriteLine(o["Nodes"][i+1]["longitude"]);
     Console.WriteLine(o["Nodes"][i+1]["latitude"]);
     Console.WriteLine(o["Nodes"][i+1]["Demand"]);
 }   

当我解析 JSON 文件时,我没有得到 Number of location 的值。所以你能帮我看看如何获​​取 nnumber of location 的值。强>。

【问题讨论】:

  • 您是否获得了null 值?
  • 不,实际上当我从文件中获取字符串时,该字符串不包含“位置编号”字段,但所有重命名字段都在获取。
  • 该字段包含或打印出什么?可以发在这里吗?
  • 我相信是因为“位置数量”中的空格
  • json 无效。Array 似乎无效。

标签: c# json parsing


【解决方案1】:

你应该使用 JArray 来解析一个 json 数组,代码如下所示:

        var res = JObject.Parse(text)["Nodes"];
        foreach (var o in res.Children<JObject>())
        {
            foreach (var property in o.Properties())
            {
                Console.WriteLine(property.Name + " " + property.Value);
            }
        }

如果您只想要位置数量,请使用:

        var res = JObject.Parse(text)["Nodes"];
        Console.WriteLine(res[0]["Number of Location"]);

【讨论】:

  • 它不是一个数组而是一个对象。
  • 他粘贴了整个文件。它实际上是一个具有数组类型的单一属性的对象。但裸属性不是有效的顶级 JSON 结构。无论如何,您不需要调用JArray.Parse,因为该属性已经通过调用JObject.Parse 被解串为JArray。
  • No JObject.Parse 的结果是 JObject 而不是 JArray
  • 您的代码将文件解析为 JObject,使用索引器访问 JArray 类型的 Nodes 属性,通过调用 ToString 重新序列化该 JArray,然后将其解析回 JArray。写这个:var res =(JArray)JObject.Parse(text)["Nodes"]
  • 这段代码和我的有什么不同,,,你说 Jobject.Parse(text) 是一个 JArray 而实际上它不是,无论如何我都会拿走 JArray.Parse ,让代码更简单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
相关资源
最近更新 更多