【发布时间】:2021-07-19 05:53:35
【问题描述】:
我收到以下 JSON 响应:
[
{
"name": "Assets",
"id": "assets---0020",
"elements": [
{
"name": "user generates an token",
"steps": [
{
"name": "I have generated a common access token",
"result": {
"duration": 1124800,
"status": "passed"
}
}
]
},
{
"name": "user generates an token",
"steps": [
{
"name": "I have generated a common access token",
"result": {
"duration": 1124800,
"status": "passed"
}
}
]
},
{
"name": "User clicks on dropdown",
"steps": [
{
"name": "User clicks on dropdown and selects option and api response printed",
"result": {
"duration": 1124800,
"status": "failed"
}
}
]
}
]
}
]
我想要下面的输出:
Name: Assets
Total - 3
No Of Success - 2
No Of Failed - 1
我一直在尝试使用 Jackson 自动解析它,但几乎没有成功。我能够显示:
Name: Assets
以下是我的主要 Java 类的代码:
package JsonToJava.test;
import java.io.File;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsontoJava
{
public static void main( String[] args ) throws JsonMappingException, JsonProcessingException
{
ObjectMapper mapper = new ObjectMapper();
try {
Data[] dataObj = mapper.readValue(new File("data/sample_array_data.json"), Data[].class);
for (Data data: dataObj) {
System.out.println("Track Name--->"+data.getName());
System.out.println("Printing Elements--->"+data.getElements());
System.out.println("------------------------");
}
} catch (JsonMappingException e) {
e.printStackTrace();
}catch (JsonProcessingException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
但不知道如何循环元素并从中获取所需的数据。 有谁知道解决方案是什么?请帮忙。
【问题讨论】:
-
如果您将 json 解析为
Data,那么只需像处理任何其他 Pojo 一样遍历生成的对象。如果您正在为此苦苦挣扎,您可能需要重新学习 Java 基础知识,尤其是有关循环、数组、集合和映射的主题。如果Data本身就是问题,那么您应该展示该类,否则我们所能做的就是猜测。 -
@Thomas - 在之前的编辑中添加了类文件代码。
-
您仍然没有共享
Data类,但您发布的代码有一个data.getElements()。假设返回Element(或类似的)的列表或数组,添加另一个循环来迭代元素和可能另一个用于步骤并将状态计数收集到Map<String, Integer>左右有什么问题?要更新地图中的值,请查看Map.compute()。