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

读取JSON文件提取名称存入List却返回空列表的问题求助

问题分析与解决

核心问题

  1. JSON格式不合法:JSON对象不允许存在重复键(name),多数JSON解析库遇到重复键时只会保留最后一个键值对,甚至直接解析失败,这是拿不到数据的根本原因。
  2. 代码逻辑错误:
    • 若datasource未初始化,调用add会触发空指针异常;即便初始化了空列表,循环逻辑也不对——jsonObject.length()返回的是对象中唯一键的数量(重复键会被合并,此处实际为1),且循环里每次添加的都是同一个name值,无法获取全部数据。

修正步骤

第一步:修正JSON格式

将重复键结构改成合法的JSON数组,两种可选格式:

格式1:用数组存储所有名称

{
  "names": [
    "Luis Lopez",
    "Armando Guascogne Ursular",
    "Brancar Diego"
  ]
}

格式2:用对象数组存储每个带name的对象

[
  {"name": "Luis Lopez"},
  {"name": "Armando Guascogne Ursular"},
  {"name": "Brancar Diego"}
]

第二步:修正Java代码

根据选择的JSON格式,使用对应解析逻辑:

对应格式1的代码

public List<String> getName() {
    // 初始化列表,避免空指针
    List<String> datasource = new ArrayList<>();
    try {
        Object obj = parser.parse(new FileReader("mypath\\name.json"));
        JSONObject jsonObject = (JSONObject) obj;
        // 获取names数组
        JSONArray namesArray = (JSONArray) jsonObject.get("names");
        // 遍历数组提取每个名称
        for (int i = 0; i < namesArray.length(); i++) {
            String name = (String) namesArray.get(i);
            datasource.add(name);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return datasource;
}

对应格式2的代码

public List<String> getName() {
    List<String> datasource = new ArrayList<>();
    try {
        Object obj = parser.parse(new FileReader("mypath\\name.json"));
        // 直接解析为JSON数组
        JSONArray jsonArray = (JSONArray) obj;
        for (int i = 0; i < jsonArray.length(); i++) {
            // 遍历每个对象,提取name字段
            JSONObject item = (JSONObject) jsonArray.get(i);
            String name = (String) item.get("name");
            datasource.add(name);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return datasource;
}

额外说明

  • 确保所用JSON解析库(如org.json)已正确引入项目依赖。
  • 路径mypath\\name.json可改用正斜杠mypath/name.json,避免Windows路径的转义问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:03:02