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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:22:07