如何用Newtonsoft Linq获取JSON数组的键再遍历数组?
使用Newtonsoft.Json.Linq解析带键的JSON数组集合
你的需求核心是先获取外层对象的键(如DENSE_FOREST、TEST),再处理对应数组里的元素,正确的做法是把整个JSON解析为JObject而非JArray,具体步骤和代码如下:
核心思路
- 外层JSON是键值对结构,用
JObject.Parse()解析整个字符串 - 遍历
JObject的所有属性(Properties()方法),每个属性的Name就是目标键,Value就是对应的数组(JArray类型) - 对每个
JArray,遍历内部的JObject元素,提取所需字段
代码示例
假设你的JSON字符串存储在jsonStr变量中:
using Newtonsoft.Json.Linq; // 解析整个JSON为JObject JObject rootObj = JObject.Parse(jsonStr); // 遍历外层所有键值对 foreach (var prop in rootObj.Properties()) { // 获取当前分类键(如"DENSE_FOREST"、"TEST") string categoryKey = prop.Name; // 获取对应的地形数组 JArray terrainArray = (JArray)prop.Value; // 遍历数组内的每个地形元素 foreach (JToken token in terrainArray) { // 跳过空对象 if (token.Type == JTokenType.Object && !token.HasValues) continue; // 转换为JObject并提取字段 JObject terrainObj = (JObject)token; string terrainKey = terrainObj["Terrain_Key"]?.ToString(); string terrainName = terrainObj["Name"]?.ToString(); // 绑定到你的数据结构,示例: // YourDataStore.Add(categoryKey, new Terrain { Key = terrainKey, Name = terrainName }); } }
关键说明
- 不要用
JArray.Parse(),外层是对象而非数组,直接用会报错 prop.Value强制转为JArray,因为你明确每个值都是数组类型- 用
?.ToString()处理字段可能缺失的情况,避免空引用异常 - 代码中加入了空对象判断,跳过JSON里的空元素
内容的提问来源于stack exchange,提问作者Hazeron
相关产品推荐
相关产品推荐

