gpt4 book ai didi

c# - JObject 解析返回额外的大括号

转载 作者:行者123 更新时间:2023-12-05 05:00:42 26 4
gpt4 key购买 nike

我有一个变量 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"])

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

我的问题有解决方案吗?

谢谢

最佳答案

{
"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"]);

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


数组版本的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

关于c# - JObject 解析返回额外的大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63017385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com