本文详解java中使用org.json库解析复杂嵌套json结构的正确方法,重点纠正数组索引误用、类型强转错误等常见问题,并提供可运行的代码示例与关键注意事项。
在Java中解析JSON数据时,一个常见误区是混淆JSON对象(JSONObject)与JSON数组(JSONArray)的访问方式,尤其在处理类似 “user”: [{ “info”: { “name”: “user 1” } }] 这类嵌套结构时。原始代码中存在两处关键错误:
- 语法错误:提供的JSON字符串本身不符合标准JSON规范——键名 0 是非法的(JSON对象的键必须是双引号包裹的字符串,且不能为纯数字);
- 类型误判:jsonObject.getJSONArray(“user”).getJSONArray(0) 错误地将数组中的第一个元素(实际是 JSONObject)当作 JSONArray 处理,导致 ClassCastException 或 JSONException。
✅ 正确的JSON结构应如下(已修正):
{
"info": "info",
"user": [
{
"info": {
"name": "user 1"
}
}
]
}
对应的标准Java解析代码如下(使用 org.json 库):
import org.json.*;
String json_string = "{ \"info\": \"info\", \"user\": [{ \"info\": { \"name\": \"user 1\" } }] }";
JSONObject obj = new JSONObject(json_string);
JSONArray userArray = obj.getJSONArray("user"); // 获取 user 数组
JSONObject firstUser = userArray.getJSONObject(0); // 取第0个元素 → JSONObject(不是 JSONArray!)
JSONObject userInfo = firstUser.getJSONObject("info"); // 进入 info 对象
String name = userInfo.getString("name"); // 获取 name 字段值
System.out.println(name); // 输出:user 1
? 关键要点总结: