【问题标题】:Looping through JObject nested array循环遍历 JObject 嵌套数组
【发布时间】:2026-01-04 03:45:01
【问题描述】:

我不知道如何通过这个 JObject 来检索运行下的 id 属性。

我有以下代码,它将成功地为我提供条目下的 id 属性,但我怎样才能再次嵌套它以进入运行部分并获取这些 ID?

JSON:

{
  "id": 168,
  "name": "section 1",
  "entries": [
    {
      "id": "908-9876-908",
      "suite_id": 15,
      "name": "List 1",
      "runs": [
        {
          "id": 169,
          "suite_id": 15
        }
      ]
    },
    {
      "id": "998-4344-439",
      "suite_id": 16,
      "name": "List 2",
      "runs": [
        {
          "id": 170,
          "suite_id": 16
        }
      ]
    }
  ]
}

C#代码:

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

foreach (JObject id in obj["entries"])
{
    string returnable = (string)id["id"];
    Console.WriteLine(returnable);
}

我尝试查看 ["entries"]["runs"] 但这也不起作用。

打印出来的是:

908-9876-908
998-4344-439

我想要的是

169
170

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    您可以使用以下代码实现它

    var jsonObject = JObject.Parse(json);
    
    foreach (var entry in jsonObject["entries"])
    {
        foreach (var run in entry["runs"])
        {
            string returnable = (string)run["id"];
            Console.WriteLine(returnable);
        }               
    }
    

    你想看

    169
    170
    

    它们是来自runs 数组的id 值,因此您应该在内部循环中枚举它们。 "name": "section 1" 后面还漏了一个逗号

    【讨论】:

    • 哦,伙计,这工作得很好——我尝试了这样的事情,但遇到了错误,我一定是有点不对劲。非常感谢,希望这篇文章对其他人有所帮助
    【解决方案2】:

    您可以使用SelectTokens() 查询JToken 层次结构中的嵌套数据。它支持JSONPath 查询,包括数组的通配符[*]

    var ids = obj.SelectTokens("entries[*].runs[*].id").Select(i => (long)i).ToList();  
    

    请参阅:Querying JSON with complex JSON Path

    演示小提琴here.

    【讨论】: