![](/img/trans.png)
[英]Restful API using Java validate JSON array contains specific values
[英]How to separate JSON values which contains specific JSON array
我需要获取依赖项JSON数组的fileName值,并将其放入单独的数组(如Java列表)。 如果每个JSON数组对象包含一个称为“漏洞”的JSON数组,则将其与“ fileName”,“ cvssScore”和“ severity”一起放入另一个列表或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"));
然后我试图通过将其转换为arraylist来获得,但是我找不到找到解决方法。
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对象列表。 您可以轻松调整输出,或者根据需要添加更多属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.