如何提取存于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
相关产品推荐
相关产品推荐

