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

如何遍历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"));
}

关键说明

  1. 类型转换:JSON解析库(比如常用的org.json)在解析数字时,默认会返回Long类型,所以需要转成Integer才能加到你的List<Integer>里;如果是用Gson这类库,处理会更灵活。
  2. 语法修正:Java中访问JSONArray的元素要用get(index)方法,而不是像JavaScript那样用array(index)的写法。

这样修改后,就能把每个patient的数值正确追加到patientList里了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:09:31