[英]How to loop through JSON object (not array)?
JSON 數據的格式如下:
"data": {
"x-y": {
"name": "x-y",
"enabled": true,
},
"a-b": {
"name": "a-b",
"enabled": true,
},
}
從 WebSocket 客戶端,我以字符串的形式接收數據。 “data”中鍵值對的數量不是固定的——即一次它可能只返回“xy”,而另一次它可能返回“xy”、“ab”、“foo-bar”等......可能收到的密鑰的可能名稱是未知的。
從我使用 WebSockets 和 JSON 的簡短而有限的經驗來看,似乎通常在這樣的場景中,數據將包含在一個數組中 - 像這樣:
"data": [
{
"name": "x-y",
"enabled": true,
},
{
"name": "a-b",
"enabled": true,
},
]
在第二種情況下,我可以循環遍歷數據 - 沒問題。 是否可以像第一個示例中那樣對數據執行類似的操作? AFAICT 這在 javascript 中是可能的,但在 C# 中找不到類似的解決方案。
這是有關將 JSON 解析為 C# 對象的文檔。 您提到不是數組,不確定您是否暗示 JSON 具有對象而不是數組,或者您希望在 C# 中不是數組。
https://www.codementor.io/@andrewbuchan/how-to-parse-json-into-ac-object-4ui1o0bx8
有很多方法和方法可以做到這一點(不限於以下)
給定的
public class Stuff {
public string name { get; set; }
public bool enabled { get; set; }
}
public class Root {
public Dictionary<string,Stuff> data { get; set; }
}
例子
var input = "{\"data\": {\r\n \"x-y\": {\r\n \"name\": \"x-y\",\r\n \"enabled\": true,\r\n },\r\n \"a-b\": {\r\n \"name\": \"a-b\",\r\n \"enabled\": true,\r\n },\r\n}}";
var result = JsonConvert.DeserializeObject<Root>(input);
Console.WriteLine("Attempt 1");
foreach (var item in result.data.Values)
Console.WriteLine($"{item.name} {item.enabled}");
// or
Console.WriteLine("Attempt 2");
var asd = JObject.Parse(input);
foreach (var item in asd["data"].Children().SelectMany(x => x))
Console.WriteLine($"{item["name"]} {item["enabled"]}");
輸出
Attempt 1
x-y True
a-b True
Attempt 2
x-y True
a-b True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.