如何使用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
相关产品推荐
相关产品推荐

