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

如何遍历JSON数组并将数据保存至ArrayList?代码异常排查

问题分析与解决:JSON数组遍历后列表数据丢失

你遇到的问题根源在于不必要的中间列表操作,以及对列表赋值逻辑的误解,导致你误以为数据丢失。咱们一步步拆解问题,再给出最简解决方案:

错误原因拆解

你原来的代码里有两个关键问题:

  1. 每次循环覆盖中间列表:al = Arrays.asList(nameString);这一行会在每次循环时,把al重新赋值为一个仅包含当前名字的固定大小列表,之前的元素完全被覆盖——但其实你根本不需要这个中间列表。
  2. 冗余的遍历操作:遍历这个只有一个元素的al再添加到al2,完全是多此一举,直接把nameString加到al2就可以完成需求。

另外,你的代码还缺少必要的空安全判断,很容易触发空指针异常,比如当response里没有information字段时,firstObject会是null,调用getJSONArray直接报错。

修正后的代码

直接简化逻辑,去掉冗余步骤,同时增加空安全处理:

JSONObject firstObject = response.optJSONObject("information");
List<String> nameList = new ArrayList<>();

// 先判断firstObject是否存在,避免空指针
if (firstObject != null) {
    JSONArray infoArray = firstObject.getJSONArray("info");
    
    for (int index = 0; index < infoArray.length(); index++) {
        JSONObject jsonObject = infoArray.getJSONObject(index);
        // 用optString代替getString,避免"name"字段不存在时抛出异常
        String name = jsonObject.optString("name");
        
        System.out.println("name: " + name);
        log.info("nameString " + name);
        
        // 直接将名字添加到目标列表
        if (!name.trim().isEmpty()) { // 可选:过滤空的或纯空格的名字
            nameList.add(name);
        }
    }
}

// 循环结束后,nameList中就保存了所有有效的名字

额外优化建议

  • 优先使用optXXX系列方法(比如optJSONObject、optString)代替getXXX,这样当字段不存在时会返回默认值(null或空字符串),而不是直接抛出异常,让代码更健壮。
  • 避免创建不必要的中间变量(比如你原来的save、al),简化代码逻辑,减少出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:18:12