You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何遍历不规则JSON任意深度的指定元素?

读取不规则JSON中任意深度的Country值

当然可以,你可以借助Json.NET(Newtonsoft.Json)的JToken和Descendants方法,无需依赖固定结构就能高效提取所有层级的Country值,不用手动遍历所有子元素。

实现步骤与代码示例

首先确保项目引用了Newtonsoft.Json包,然后用以下代码处理:

using Newtonsoft.Json.Linq;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        string json = @"[{
                ""CustomerId"": 1,
                ""Country"": ""Germany""
            }, {
                ""CustomerId"": 2,
                ""Country"": ""Spain""
            }, {
                ""CustomerId"": 3,
                ""courses"": [
                    {""Country"": ""Vanuatu""},
                    {""Country"": ""France""}
                ]
            }
        ]";

        // 解析JSON为JToken(自动适配数组/对象结构)
        JToken root = JToken.Parse(json);

        // 递归遍历所有节点,筛选出名为"Country"的属性并提取值
        var countryList = root.Descendants()
                              .OfType<JProperty>()
                              .Where(p => p.Name.Equals("Country", StringComparison.Ordinal))
                              .Select(p => p.Value.ToString())
                              .ToList();

        // 输出结果
        foreach (var country in countryList)
        {
            Console.WriteLine(country);
        }
    }
}

说明

  • JToken.Parse会自动识别JSON是数组还是对象,无需提前指定JArray或JObject,避免依赖固定结构。
  • Descendants()方法会递归遍历JSON的所有层级节点,内部经过优化,比手动写循环递归效率更高。
  • 通过筛选JProperty的名称为Country,可以精准提取所有位置的对应值,不管它在顶层还是嵌套的数组、对象中。

运行后会输出:

Germany
Spain
Vanuatu
France

内容的提问来源于stack exchange,提问作者Glyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:42:42