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

如何使用json-simple从JSON文件中读取嵌套数组结构

解决方法

问题点

  • 键名拼写错误:你的JSON结构根节点下的用户配置键为Users,代码中调用jsonObject.get("User1")无法匹配到对应节点,会触发空指针异常,需先修正此处。
  • 嵌套元素类型识别错误:你使用的json-simple库中,JSONArray的嵌套数组元素本身也是JSONArray类型,调用arr.toArray()得到的Object数组中每个元素本质是JSONArray实例,你看到的字符串格式是直接打印时触发的toString输出,并非实际存储的是字符串。

实现代码

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class NestedJsonParser {
    public static void main(String[] args) {
        JSONParser parser = new JSONParser();
        try {
            Object obj = parser.parse(new FileReader("myPath"));
            JSONObject rootJson = (JSONObject) obj;
            // 修正键名匹配JSON结构
            JSONObject usersNode = (JSONObject) rootJson.get("Users");
            JSONArray infoArray = (JSONArray) usersNode.get("info");
            
            // 转换为嵌套子数组的集合结构
            List<List<String>> nestedResult = new ArrayList<>();
            for (Object item : infoArray) {
                JSONArray subJsonArray = (JSONArray) item;
                List<String> subList = new ArrayList<>();
                for (Object element : subJsonArray) {
                    subList.add((String) element);
                }
                nestedResult.add(subList);
            }
            
            // 验证输出
            System.out.println(nestedResult);
            // 如需原生二维数组,可追加如下转换:
            // String[][] nestedArray = nestedResult.stream().map(list -> list.toArray(new String[0])).toArray(String[][]::new);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行后得到的nestedResult就是存储子数组的嵌套结构,如需原生二维字符串数组,可使用代码注释中的转换逻辑实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:27:03