JObject解析返回多余的花括号

时间:2020-07-21 14:59:28

标签: c# json

我有一个变量projectData,其中包含存储在数据库中的有效json字符串。

执行以下操作之后:

JObject obj = new JObject();
obj = JObject.Parse(projectData);

而不是得到

{
"devices": {
    "device_A": {
        "id": "12345",
        "name": "test",
        "enabled": true
    }
  }
}

我反而得到了:

    {{
        "devices": {
            "device_A": {
                "id": "12345",
                "name": "test",
                "enabled": true
            }
        }
    }}

因此,基本上将{}添加到了我的json字符串中。

我也尝试了以下方法:

obj = JsonConvert.DeserializeObject<JObject>(projectData);

它没有用。

为什么这对我来说是个问题?

我想遍历obj["devices"]数组,并在执行以下操作时

foreach(var d in obj["devices"])

由于双花括号,它根本不起作用。

我的问题有解决方案吗?

谢谢

1 个答案:

答案 0 :(得分:2)

{
"devices": {
    "device_A": {
        "id": "12345",
        "name": "test",
        "enabled": true
    }
  }
}

您的json将设备显示为json对象而不是数组。您不能使用for循环对其进行迭代。

您可以先解析数据然后再使用[]括号来访问属性。

var obj = JObject.Parse(jsonString);
Console.WriteLine(obj["devices"]["device_A"]["id"].Value<string>());

//prints
12345

// To Loop through multiple devices... you can use this.
foreach (var device in ((JObject)obj["devices"]).Properties())
    Console.WriteLine(obj["devices"][device.Name]["id"]);

此外,当您使用调试模式时,手表或本地人将显示{{ }},因为括号被转义了。


Json的阵列版本

如果您的json如下所示,则可以使用for循环访问JArray的元素。

{
"devices": [
    {
      "device_A": {
        "id": "12345",
        "name": "test",
        "enabled": true
      }
    }
  ]
}

使用上述json,您可以通过以下方式使用for循环

var obj = JObject.Parse(json);
foreach (var device in obj["devices"])
    Console.WriteLine(device["device_A"]["id"]);

// Prints
12345