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

如何提取存于List<String>的JSON数组中externalId1与externalId2的字段值

Java解析JSON数组异常解决方案

错误根因

你遇到的报错核心是JSONArray构造与类型匹配问题,具体错误点如下:

  • 入参类型错误:org.json.JSONArray的构造函数不支持直接传入List<String>类型参数,你直接把response1传入构造时,JSONArray会将List中的每个字符串直接作为数组的String类型元素,而非将整体解析为嵌套的JSONObject结构,因此调用getJSONObject(i)时会抛出类型不匹配的"NOT JSONObject"异常。
  • 变量引用错误:循环条件中你写的是array.length(),但你定义的JSONArray变量名是jsonArray,属于变量名笔误。
  • 语法错误:两行getString调用都缺少闭合右括号),属于基础语法疏漏。

修复代码

如果你的response1中仅存储了1个元素,就是完整的JSON数组字符串,使用如下代码即可完成取值:

import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;

public class ParseJson {
    public static void main(String[] args) {
        // 你的原始响应存储List
        List<String> response1 = new ArrayList<>();
        // 这里模拟你把完整的JSON数组字符串存入了response1
        response1.add("[{\"externalId1\":\"NULL\",\"externalId2\":\"NULL\"},{\"externalId1\":\"NULL\",\"externalId2\":\"NULL\"}]");

        // 1. 先取出完整的JSON数组字符串
        String jsonStr = response1.get(0);
        // 2. 用字符串构造JSONArray
        JSONArray jsonArray = new JSONArray(jsonStr);
        // 3. 定义存储结果的List,可根据需要调整存储结构
        List<String> resultList = new ArrayList<>();

        // 4. 遍历取值
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject object = jsonArray.getJSONObject(i);
            String id1 = object.getString("externalId1");
            String id2 = object.getString("externalId2");
            // 打印输出
            System.out.println(id1);
            System.out.println(id2);
            // 存入结果List
            resultList.add(id1);
            resultList.add(id2);
        }
    }
}

特殊场景适配

如果你的response1中是把每个JSON对象字符串作为单独元素存储,直接遍历转JSONObject即可:

List<String> response1 = new ArrayList<>();
response1.add("{\"externalId1\":\"NULL\",\"externalId2\":\"NULL\"}");
response1.add("{\"externalId1\":\"NULL\",\"externalId2\":\"NULL\"}");
List<String> resultList = new ArrayList<>();

for (String objStr : response1) {
    JSONObject object = new JSONObject(objStr);
    String id1 = object.getString("externalId1");
    String id2 = object.getString("externalId2");
    System.out.println(id1);
    System.out.println(id2);
    resultList.add(id1);
    resultList.add(id2);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:57:02