未知父对象键时,如何直接访问JSON中的totalSize与records?
解决JSON动态父键下的totalSize和records获取问题
核心思路
由于包含totalSize和records的父对象键名不固定,我们可以遍历JSON顶级对象的所有属性,筛选出同时包含这两个字段的子对象,再从中提取所需数据。
完整代码示例
1. 处理外层为数组的JSON(你的原始JSON结构)
// 解析JSON数组 JArray jsonArray = JArray.Parse(json); // 取数组第一个元素转为JObject JObject jsonObject = jsonArray[0] as JObject; // 遍历所有顶级属性,定位包含totalSize和records的目标对象 var targetContainer = jsonObject.Properties() .Where(prop => prop.Value is JObject) .Select(prop => prop.Value as JObject) .FirstOrDefault(container => container.ContainsKey("totalSize") && container.ContainsKey("records")); // 提取数据 if (targetContainer != null) { int totalSize = targetContainer.Value<int>("totalSize"); if (totalSize > 0) { JArray records = targetContainer.Value<JArray>("records"); // 这里编写对records的处理逻辑 } }
2. 若外层直接是对象的情况(扩展场景)
如果你的JSON外层不是数组,直接用JObject.Parse解析后,执行上述遍历逻辑即可:
JObject jsonObject = JObject.Parse(json); var targetContainer = jsonObject.Properties() .Where(prop => prop.Value is JObject) .Select(prop => prop.Value as JObject) .FirstOrDefault(container => container.ContainsKey("totalSize") && container.ContainsKey("records")); // 后续数据提取逻辑同上
关键逻辑说明
- 用
jsonObject.Properties()遍历所有顶级属性,彻底摆脱固定键名的依赖 - 通过
ContainsKey("totalSize") && ContainsKey("records")精准定位目标容器对象 - 用
FirstOrDefault获取第一个符合条件的对象,如果存在多个符合条件的容器,可根据需求改为ToList()批量处理
内容的提问来源于stack exchange,提问作者Christy
相关产品推荐
相关产品推荐

