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

Java解析JSON时JSONArray[5]找不到问题排查求助

嘿,我来帮你搞定这个JSON解析的问题!咱们一步步来排查:

排查JSONArray解析错误的问题

1. 先揪出代码里的第一个明显错误

你提供的JSON里,results是个二维数组,但它里面只有1个子数组(数组索引从0开始哦)。但你的代码里写的是results.get(1)——这直接就会触发数组索引越界的错误,因为results根本没有索引1的元素!

先明确你的JSON结构:

"results": [ 
  [ "2C30AE32-191@Local", "Imperva Inc.", "SecureSphere", "Custom Violation", 1, "", ... ] 
]

这里results的长度是1,只能用results.get(0)才能拿到里面的子数组。

2. 关于你遇到的JSONArray[5] not found错误

如果错误提示是索引5不存在,那得从两个方向查:

  • 实际JSON的子数组长度:你贴出来的子数组有19个元素,索引5的位置是空字符串"",是存在的。但如果你的真实响应里这个子数组长度不够6(也就是最多到索引4),那肯定会报这个错。建议你打印出完整的output字符串,确认子数组的实际元素数量。
  • 代码里的索引是否写错:比如你是不是误写了first.get(5)?或者有没有在其他地方访问了子数组的索引5,但那个位置的元素其实不存在?

3. 修正后的代码参考

我给你改了最基础的错误,还加了安全判断,避免再踩索引越界的坑:

String output = response.getEntity(String.class);
JSONObject obj = new JSONObject(output);
JSONArray results = obj.getJSONArray("results");

// 先判断results数组有没有元素
if (results.length() > 0) {
    // 用getJSONArray更规范,不用强制转换
    JSONArray first = results.getJSONArray(0); 
    
    // 取值前先检查子数组长度够不够,避免报错
    if (first.length() >= 6) {
        // 看你要的deviceVendor应该是第二个元素,索引是1
        String deviceVendor = first.getString(1); 
        // deviceProduct是第三个元素,索引2
        String deviceProduct = first.getString(2); 
        // 索引5的空字符串
        String emptyField = first.getString(5); 
        // ... 其他你需要的操作
    } else {
        System.err.println("子数组元素不够,拿不到索引5的内容");
    }
} else {
    System.err.println("results数组是空的哦");
}

4. 给你几个小建议

  • 解析JSON时,一定要先判断数组长度,别直接硬写索引取值,很容易踩坑。
  • 尽量用JSON库提供的类型安全方法,比如getJSONArray()、getString()这些,比强制转换靠谱多了。
  • 如果不确定JSON结构,先把完整的响应字符串打印出来,确认结构和元素数量和你想的一致——有时候响应可能会有截断或者格式变化,你肉眼看到的和实际拿到的可能不一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:14:51