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

Java 如何分离包含特定JSON数组的JSON值,java,json,arraylist,Java,Json,Arraylist,我需要获取dependencies JSON数组的文件名值,并将其放入单独的数组中(如java列表)。如果每个JSON数组对象包含名为“漏洞”的JSON数组,则将其与“文件名”、“cvssScore”和“严重性”一起放入另一个列表或JSON对象中 这是JSON对象。这是一个相当大的JSON,所以我上传到硬盘 我可以通过像下面这样直走得到一个特定的值 String jsonFile = "C:\\Users\\Dexter\\IdeaProjects\\autoupgrader\\target\

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

我可以通过像下面这样直走得到一个特定的值

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()));
List List=new ArrayList();

对于(int i=0;i要生成初始列表,可以使用已有的循环,也可以使用Java流API:

List<JSONObject> items = StreamSupport.stream(dependencies.spliterator(), false).map(d -> (JSONObject) d)
        .collect(Collectors.toList());
List items=StreamSupport.stream(dependencies.spliterator(),false).map(d->(JSONObject)d)
.collect(Collectors.toList());
通过这种方式,您可以轻松筛选包含关键“漏洞”的所有对象:

List items=StreamSupport.stream(dependencies.spliterator(),false).map(d->(JSONObject)d)
.filter(o->o.has(“漏洞”))
.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());
List items=StreamSupport.stream(dependencies.spliterator(),false).map(d->(JSONObject)d)
.filter(o->o.has(“漏洞”))
.flatMap(o->StreamSupport.stream(o.getJSONArray(“漏洞”).spliterator(),false)
.map(d->(JSONObject)d)
.map(v->{
JSONObject j=新的JSONObject();
j、 放置(“文件名”,o.getString(“文件名”);
j、 put(“cvssScore”,v.getString(“cvssScore”);
j、 put(“严重性”,v.getString(“严重性”);
返回j;
}))
.collect(Collectors.toList());

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

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

List<JSONObject> items = StreamSupport.stream(dependencies.spliterator(), false).map(d -> (JSONObject) d)
        .collect(Collectors.toList());
List items=StreamSupport.stream(dependencies.spliterator(),false).map(d->(JSONObject)d)
.collect(Collectors.toList());
通过这种方式,您可以轻松筛选包含关键“漏洞”的所有对象:

List items=StreamSupport.stream(dependencies.spliterator(),false).map(d->(JSONObject)d)
.filter(o->o.has(“漏洞”))
.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());
List items=StreamSupport.stream(dependencies.spliterator(),false).map(d->(JSONObject)d)
.filter(o->o.has(“漏洞”))
.flatMap(o->StreamSupport.stream(o.getJSONArray(“漏洞”).spliterator(),false)
.map(d->(JSONObject)d)
.map(v->{
JSONObject j=新的JSONObject();
j、 放置(“文件名”,o.getString(“文件名”);
j、 put(“cvssScore”,v.getString(“cvssScore”);
j、 put(“严重性”,v.getString(“严重性”);
返回j;
}))
.collect(Collectors.toList());
结果是JSON对象列表。您可以轻松调整输出,或者添加更多属性(如果需要)