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
相关产品推荐
相关产品推荐

