簡體   English   中英

如何遍歷 JSON 對象(不是數組)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM