You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历数组列表后,如何提取cvss_score对应的value值?

问题描述

我有如下JSON结构:

{
   "tags":[
      {
         "key":"category",
         "value":"Generic Secret"
      },
      {
         "key":"category",
         "value":"Secret"
      },
      {
         "key":"cvss_31_severity_rating",
         "value":"none"
      },
      {
         "key":"cvss_score",
         "value":"0"
      },
      {
         "key":"language",
         "value":"javascript"
      },
      {
         "key":"owasp_category",
         "value":"a3-sensitive-data-exposure"
      },
      {
         "key":"sink_method",
         "value":"src/auth/auth.controller.ts::program:validateWithX5UJwt"
      },
      {
         "key":"source_method",
         "value":"src/auth/auth.controller.ts::program:validateWithX5UJwt"
      }
   ]
}

我用以下Java代码遍历tags数组:

List<String[]> list = response.getBody().jsonPath().getList("response.findings.tags");
for (int k = 0; k < list.size(); k++) {
    System.out.println(list.get(k));
}

输出结果为:

[{key=category, value=Generic Secret}, {key=category, value=Secret}, {key=cvss_31_severity_rating, value=none}, {key=cvss_score, value=0}, {key=language, value=javascript}, {key=owasp_category, value=a3-sensitive-data-exposure}, {key=sink_method, value=src/auth/auth.controller.ts::program:validateWithJKUJwt}, {key=source_method, value=src/auth/auth.controller.ts::program:validateWithJKUJwt}]

现在需要提取key为cvss_score对应的value值(此例中为0),该如何实现?


解决方案

方案一:直接使用JsonPath过滤提取(推荐)

JsonPath支持通过条件过滤直接定位目标数据,无需遍历整个列表,代码更简洁高效:

// 直接提取cvss_score对应的value值
String cvssScore = response.getBody().jsonPath().getString("response.findings.tags[?(@.key == 'cvss_score')].value");
System.out.println(cvssScore); // 输出结果:0

如果需要将结果转为整数类型,可额外处理:

int cvssScoreInt = Integer.parseInt(cvssScore);

方案二:遍历列表提取

注意原代码中List<String[]>的类型声明有误(每个tag是键值对对象,而非字符串数组),应改为List<Map<String, String>>,然后遍历判断key匹配:

// 正确接收tags列表,每个元素是存储键值对的Map
List<Map<String, String>> tagsList = response.getBody().jsonPath().getList("response.findings.tags", Map.class);
for (Map<String, String> tag : tagsList) {
    if ("cvss_score".equals(tag.get("key"))) {
        String cvssScore = tag.get("value");
        System.out.println(cvssScore); // 输出结果:0
        break; // 找到目标后跳出循环,提升效率
    }
}

内容的提问来源于stack exchange,提问作者Manan Girdhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:15:38