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

如何使用Java读取大型嵌套JSON并提取重复key的对应值

修复方案

你现有代码存在两个核心错误:

  • 待解析JSON的根节点为JSONObject类型,你直接用JSONArray解析会触发类型不匹配异常
  • 没有按照JSON结构逐层取值:需要先从根节点取issues数组,再遍历每个数组元素取fields对象,最后才能拿到目标labels数组

可直接运行的修复后代码(基于org.json库)

import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;

public class ExtractLabels {
    public static void main(String[] args) {
        String jsonString = "这里替换为你的实际JSON字符串";
        List<String> labelList = new ArrayList<>();

        // 1. 解析根JSONObject
        JSONObject rootJson = new JSONObject(jsonString);
        // 2. 提取issues数组
        JSONArray issuesArray = rootJson.getJSONArray("issues");

        // 3. 遍历每个issue
        for (int i = 0; i < issuesArray.length(); i++) {
            JSONObject issue = issuesArray.getJSONObject(i);
            // 4. 取fields对象
            JSONObject fields = issue.getJSONObject("fields");
            // 5. 取labels数组
            JSONArray labels = fields.getJSONArray("labels");
            // 6. 遍历labels数组存入结果列表
            for (int j = 0; j < labels.length(); j++) {
                labelList.add(labels.getString(j));
            }
        }

        // 打印结果验证
        System.out.println(labelList);
    }
}

如果遇到部分fields不存在或者labels为空的场景,可以加非空判断避免空指针:

if (issue.has("fields") && !issue.isNull("fields")) {
    JSONObject fields = issue.getJSONObject("fields");
    if (fields.has("labels") && !fields.isNull("labels")) {
        JSONArray labels = fields.getJSONArray("labels");
        // 遍历存值逻辑同上
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:15:01