gpt4 book ai didi

java - 如何分离包含特定 JSON 数组的 JSON 值

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:11 26 4
gpt4 key购买 nike

我需要获取依赖项 JSON 数组的 fileName 值并将其放入单独的数组(如 java 列表)中。如果每个 JSON 数组对象包含名为“漏洞”的 JSON 数组,请将其与“文件名”、“cvssScore”和“严重性”一起放入另一个列表或 JSON 对象中这是 JSON 对象。这是一个相当大的 JSON,所以我上传到云端硬盘

https://drive.google.com/open?id=1puZRU4XY5loLBnBqo2NvKajj_dBR7Ol7

我可以通过像下面这样直接获取特定值。

String jsonFile = "C:\\Users\\Dexter\\IdeaProjects\\autoupgrader\\target\\dependency-check-report.json";
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(jsonFile)));

JSONTokener tokener = new JSONTokener(br);
JSONObject object = new JSONObject(tokener);
JSONArray ja = object.getJSONArray("dependencies");
JSONObject jo = ja.getJSONObject(0);
JSONObject jo2 = jo.getJSONObject("evidenceCollected");
JSONArray ja2 = jo2.getJSONArray("versionEvidence");
JSONObject jo3 = ja2.getJSONObject(0);
System.out.println(jo3.getString("value"));

然后我尝试将其转换为数组列表,但我找不到解决方法。

List <JSONObject> list = new ArrayList<>();
for (int i=0; i<ja.length(); i++){
list.add(ja.getJSONObject(i));
}

System.out.println(Arrays.toString(list.toArray()));

最佳答案

要生成初始列表,您可以使用已有的循环,也可以使用 Java Stream API:

List<JSONObject> items = StreamSupport.stream(dependencies.spliterator(), false).map(d -> (JSONObject) d)
.collect(Collectors.toList());

通过这种方式,您可以轻松过滤包含关键“漏洞”的所有对象:

List<JSONObject> items = StreamSupport.stream(dependencies.spliterator(), false).map(d -> (JSONObject) d)
.filter(o -> o.has("vulnerabilities"))
.collect(Collectors.toList());

要生成包含所有易受攻击文件的第二个列表,及其文件名、cvssScore 和严重性,您可以扩展前面的示例:

List<JSONObject> items = StreamSupport.stream(dependencies.spliterator(), false).map(d -> (JSONObject) d)
.filter(o -> o.has("vulnerabilities"))
.flatMap(o -> StreamSupport.stream(o.getJSONArray("vulnerabilities").spliterator(), false)
.map(d -> (JSONObject) d)
.map(v -> {
JSONObject j = new JSONObject();
j.put("fileName", o.getString("fileName"));
j.put("cvssScore", v.getString("cvssScore"));
j.put("severity", v.getString("severity"));
return j;
}))
.collect(Collectors.toList());

其结果是 JSON 对象的列表。您可以轻松调整输出,或者根据需要添加更多属性。

关于java - 如何分离包含特定 JSON 数组的 JSON 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54587739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com