如何读取大嵌套 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]
您好,我正在尝试读取以下结构的非常复杂的嵌套 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]