如何读取大嵌套 Json 并使用 Java 获取重复键值

How to read big nested Json and fetch a repetitive key value using Java

您好,我正在尝试读取以下结构的非常复杂的嵌套 Json,并且需要获取所有标签值并存储在列表中。我尝试了很多方法,但没有成功。你能帮我吗 this.I 已经尝试了下面的代码。但无法获取详细信息

JSONArray jsonArray = new JSONArray(jsonString);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject json = jsonArray.getJSONObject(i);
                Iterator<String> keys = json.keys();
                while (keys.hasNext()) {
                    String key = keys.next();
                    if (key.toString().equalsIgnoreCase("labels")) {
                        Strin val = json.get(key).toString();
                    System.out.println(val);

                    }

                }
        

{
   "expand":"schema,names",
   "total":142,
   "issues":[
      {
         "id":"10220951",
            "fields":{
     "labels": [
                "Test"
            ]
}}{
     "id":"10220952",
        "fields":{
     "labels": [
                "Test2"
            ]
}}

我有2个解决方案,你可以选择其中一个。

1.Use 放心的JsonPath

import io.restassured.path.json.JsonPath;

List<List<String>> allLabels = JsonPath.from(jsonString).getList("issues.fields.labels");

List<String> labels = allLabels.stream()
               .flatMap(Collection::stream)
               .collect(Collectors.toList());

System.out.println(labels);
//[Test, Test2]

2.Use jayway 的 JsonPath

import com.jayway.jsonpath.JsonPath;

List<List<String>> allLabels = JsonPath.read(res, "$..labels");

List<String> labels = allLabels.stream()
               .flatMap(Collection::stream)
               .collect(Collectors.toList());

System.out.println(labels);
//[Test, Test2]