C#中读取JSON第三层级数组值的技术问题
从JSON第三层级数组提取值的解决办法
嘿,我明白你现在的处境——接手一个半完成的C#网站项目,还在学习C#,遇到JSON层级提取的问题确实有点头疼。别担心,咱们一步步来解决这个问题!
首先,我先假设你的JSON结构大概是这种三层嵌套的样子(如果实际结构不一样,你可以调整类结构或者JObject的路径):
{
"TopLevelData": {
"MiddleSection": {
"TargetArray": [
{"ItemName": "第一个值"},
{"ItemName": "第二个值"}
]
}
}
}
方法一:用强类型类映射(推荐,更安全)
这是Newtonsoft.Json最常用的方式,先定义和JSON结构完全匹配的类:
// 根对象,对应JSON最外层 public class RootJsonModel { public TopLevelData TopLevelData { get; set; } } // 第一层级对象 public class TopLevelData { public MiddleSection MiddleSection { get; set; } } // 第二层级对象,包含目标数组 public class MiddleSection { public List<TargetItem> TargetArray { get; set; } } // 数组里的单个元素类 public class TargetItem { public string ItemName { get; set; } }
然后反序列化JSON并提取值:
// 假设你已经通过异步任务获取到了JSON字符串 string jsonResponse = "你的异步任务返回的JSON内容"; // 反序列化到强类型对象 RootJsonModel model = JsonConvert.DeserializeObject<RootJsonModel>(jsonResponse); // 提取第三层级数组的值,这里要注意空引用检查! if (model?.TopLevelData?.MiddleSection?.TargetArray != null) { // 把数组里的ItemName提取到变量里,比如一个List<string> List<string> extractedValues = model.TopLevelData.MiddleSection.TargetArray .Select(item => item.ItemName) .ToList(); // 现在你可以把这些值输出到指定位置了,比如网站的控件里 // 举个例子:如果是ASP.NET WebForms,添加到Label或者Repeater foreach (var val in extractedValues) { yourDisplayLabel.Text += $"{val}<br/>"; // 如果是MVC/Razor页面,可将这个List传入View循环渲染 } }
如果JSON里的键和你类的属性名不一样(比如JSON里是target_array而不是TargetArray),可以用[JsonProperty]特性来手动匹配:
[JsonProperty("target_array")] public List<TargetItem> TargetArray { get; set; }
方法二:用JObject动态解析(不用定义类,适合快速测试)
如果你不想写一堆类,也可以用Newtonsoft.Json的JObject直接解析:
string jsonResponse = "你的JSON字符串"; JObject jsonObj = JObject.Parse(jsonResponse); // 定位到第三层级的数组,注意路径要和你的JSON结构完全对应 JArray targetArray = (JArray)jsonObj["TopLevelData"]["MiddleSection"]["TargetArray"]; if (targetArray != null) { foreach (JToken item in targetArray) { // 提取数组里的单个值 string itemValue = (string)item["ItemName"]; // 输出到指定位置 Console.WriteLine(itemValue); // 或者赋值给网站控件 } }
关键注意点
- 空引用检查:一定要用
?.或者提前判断每个层级是否为null,不然如果JSON里某个层级缺失,程序会抛出空引用异常。 - 属性名匹配:确保类的属性名和JSON的键完全一致,或者用
[JsonProperty]手动映射。 - 异步任务的JSON获取:如果你的异步任务是用
HttpClient之类的工具获取,记得用await来正确获取返回的JSON字符串,比如string json = await httpClient.GetStringAsync("目标接口URL");
内容的提问来源于stack exchange,提问作者Paul Almond
相关产品推荐
相关产品推荐

