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

Java使用JSONArray、JSONObject解析嵌套复杂JSON响应获取字段值

嵌套JSON解析方法(基于org.json的JSONArray/JSONObject实现)

你现有代码有两个问题:

  • 循环变量书写错误:定义的循环变量是小写j,递增逻辑里写了大写J++,会直接触发编译错误
  • 解析层级不够:调用jarr.getString("BCD")只会把BCD对应的整个嵌套对象转成字符串返回,不会继续向内解析拿到CDE的值。

JSON解析是逐层匹配key的过程,嵌套对象只需要多调用一次getJSONObject拿到内层对象,再取目标字段即可,完整步骤如下:

  1. 先将原始JSON响应字符串解析为最外层的根JSONObject
  2. 从根节点直接获取key为ABC的JSONArray,不需要额外调用toString做二次转换,用内置的getJSONArray方法更稳定
  3. 遍历JSONArray,拿到数组中存储的每一个JSONObject元素
  4. 从当前元素中获取key为BCD的嵌套JSONObject
  5. 最后从BCD对应的内层对象中,获取key为CDE的字段值

可直接运行的参考代码:

import org.json.JSONArray;
import org.json.JSONObject;

public class JsonParseTest {
    public static void main(String[] args) {
        // 原始JSON响应
        String jsonResponse = "{\n" +
                "  \"ABC\": [\n" +
                "    {\n" +
                "      \"BCD\": {\n" +
                "        \"CDE\": \"HIJ\"\n" +
                "      }\n" +
                "    }\n" +
                "  ]\n" +
                "}";

        // 解析根节点
        JSONObject root = new JSONObject(jsonResponse);
        // 获取ABC对应数组
        JSONArray abcArray = root.getJSONArray("ABC");

        for (int i = 0; i < abcArray.length(); i++) {
            // 取数组内的单个元素对象
            JSONObject arrayItem = abcArray.getJSONObject(i);
            // 取内层BCD对象
            JSONObject bcdObj = arrayItem.getJSONObject("BCD");
            // 取目标CDE字段值
            String cdeVal = bcdObj.getString("CDE");
            // 控制台输出结果为 HIJ
            System.out.println(cdeVal);
        }
    }
}

解析容错提示:如果无法保证JSON结构完全固定,建议使用optJSONObject()、optString()系列方法,可设置默认值,避免字段缺失、类型不匹配时直接抛出异常。例如bcdObj.optString("CDE", "")表示CDE字段不存在时默认返回空字符串。

内容的提问来源于stack exchange,提问作者Vidya B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:27:34