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

