我有一个变量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"])
由于双花括号,它根本不起作用。
我的问题有解决方案吗?
谢谢
答案 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