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

如何使用Newtonsoft Json提取JSON数组中全部ID并解决索引越界问题

解决JToken提取JSON数组所有id时索引越界的问题

问题原因排查

你遇到的索引越界问题,大概率是以下两种情况:

  • 错误地将JToken直接当作数组用索引访问,未先转换为JArray,导致实际可访问元素数量与预期不符
  • 循环条件硬编码固定值(比如i < 100),或获取数组长度的方式错误,导致循环范围超出实际集合大小

正确解决方案

方法1:使用foreach遍历(最稳妥)

直接遍历results数组所有元素,无需关心索引,彻底避免越界问题:

// 假设已加载JSON到JObject root
JArray resultsArray = (JArray)root["cars"]["results"];
List<string> ids = new List<string>(); // 若id为数字类型,改用List<int>

foreach (JToken car in resultsArray)
{
    string id = car["id"].ToString();
    ids.Add(id);
}

// 转换为目标数组
string[] idArray = ids.ToArray();

方法2:基于JArray的Count做循环条件

若坚持用for循环,必须以JArray的实际长度作为循环上限:

JArray resultsArray = (JArray)root["cars"]["results"];
List<string> ids = new List<string>();

for (int i = 0; i < resultsArray.Count; i++)
{
    JToken car = resultsArray[i];
    string id = car["id"].ToString();
    ids.Add(id);
}

string[] idArray = ids.ToArray();

关键注意点

  • 务必确保root["cars"]["results"]是JArray类型,可先加类型判断避免转换报错:
    if (root["cars"]["results"] is JArray resultsArray)
    {
        // 执行遍历逻辑
    }
    
  • 不要硬编码循环上限值(比如117),始终用集合的Count属性动态获取长度,适配JSON数据的变化

内容的提问来源于stack exchange,提问作者icebuken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:05:15