如何遍历JSON文件并将值追加到patientList集合中?
解决方法:正确提取JSON对象中的patient值
看起来你已经走对了90%的路——成功读取并解析了JSON数组,但卡在了从每个对象里提取具体的patient值这一步。问题出在:你的JSON数组里的每个元素都是键值对形式的JSONObject,而不是直接的整数,所以直接把数组元素加到Integer类型的列表里肯定会出问题(甚至编译都通不过)。
先看你的核心错误点:
- 原代码里的
jsonArray(i)是Java语法错误,应该用jsonArray.get(i)来获取数组元素 - 取出的元素是
JSONObject,需要先提取其中的patient字段值,再转成整数类型
修正后的完整代码
private List<Integer> getJsonFile(String path) { List<Integer> patientList = new ArrayList<>(); try (FileReader reader = new FileReader(path)) { JSONParser jsonParser = new JSONParser(); JSONArray jsonArray = (JSONArray) jsonParser.parse(reader); System.out.println(jsonArray); // 遍历JSON数组,逐个提取patient值 for (int i = 0; i < jsonArray.size(); i++) { // 把数组元素强转为JSONObject JSONObject patientObject = (JSONObject) jsonArray.get(i); // 提取patient字段的值,注意JSON库默认返回Long,转成Integer Integer patientId = ((Long) patientObject.get("patient")).intValue(); patientList.add(patientId); } } catch (IOException | ParseException | NullPointerException e) { e.printStackTrace(); } return patientList; }
简化写法(增强for循环)
如果觉得普通for循环麻烦,也可以用增强for循环来简化:
// 替换原有的for循环 for (Object item : jsonArray) { JSONObject patientObject = (JSONObject) item; // 如果你用的JSON库支持getInt方法,直接这样写更简洁 patientList.add(patientObject.getInt("patient")); }
关键说明
- 类型转换:JSON解析库(比如常用的org.json)在解析数字时,默认会返回
Long类型,所以需要转成Integer才能加到你的List<Integer>里;如果是用Gson这类库,处理会更灵活。 - 语法修正:Java中访问JSONArray的元素要用
get(index)方法,而不是像JavaScript那样用array(index)的写法。
这样修改后,就能把每个patient的数值正确追加到patientList里了。
内容的提问来源于stack exchange,提问作者Jam1
相关产品推荐
相关产品推荐

