本文详解如何使用 org.json 库准确访问 json 中多层嵌套的数组与对象结构,重点纠正常见语法错误(如误用 getjsonarray 代替 getjsonobject),并通过修正后的代码演示安全、可读的层级遍历方法。
在 Java 中解析复杂 JSON 数据时,一个常见误区是混淆 getJSONObject() 与 getJSONArray() 的使用场景——尤其当 JSON 结构包含“数组中嵌套对象,对象中再嵌套对象”时(如 “user”: [{ “info”: { “name”: “user 1” } }])。原始代码:
jsonObject.getJSONArray("user").getJSONArray(0).getJSONArray("info").getString("name")
存在三处关键错误:
- user 数组的第 0 个元素是 JSON 对象({ “info”: { … } }),不是 JSONArray,因此不能调用 getJSONArray(0);
- info 字段本身也是一个 JSON 对象,而非数组,故 getJSONArray(“info”) 会抛出 JSONException;
- 调用链过长且未做空值/类型校验,一旦某一层级缺失或类型不符,程序将直接崩溃。
✅ 正确做法是逐层判断类型、分步获取,并优先使用语义明确的方法:
JSONObject obj = new JSONObject(jsonString);
JSONArray userArray = obj.getJSONArray("user"); // 获取 user 数组
JSONObject firstUser = userArray.getJSONObject(0); // 获取数组首项(JSONObject)
JSONObject infoObj = firstUser.getJSONObject("info"); // 获取 info 对象
String userName = infoObj.getString("name"); // 安全提取 name 字符串
System.out.println(userName); // 输出:user 1
? 重要注意事项: