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

如何用JsonPath统一解析JSON中单个或数组形式的记录并提取ID?

如何用单个JsonPath表达式兼容单对象和数组类型的CVE字段?

我有一段JSON数据,其中CVE字段可能是单个记录对象,也可能是记录数组。需要提取所有记录的ID字段,汇总为包含1个或多个ID的数组。

输入1:单条记录

{
  "CVE": {
    "ID": "CVE-2022-26138",
    "URL": "foo.bar"
  }
}

输入2:多条记录数组

{
  "CVE": [
     { "ID": "CVE-2019-2969", "URL": "foo.com" },
     { "ID": "CVE-2019-3030", "URL": "bar.com" }
  ]
}

我尝试过以下两个JsonPath表达式,但都只能处理一种输入:

  • $.CVE.ID:对输入1返回["CVE-2022-26138"],但对输入2返回空数组
  • $.CVE.*.ID:对输入1返回空数组[],但对输入2能得到正确结果["CVE-2019-2969", "CVE-2019-3030"]

请问是否存在一个能同时处理两种输入的JsonPath表达式?


可行的JsonPath表达式

使用表达式 $.CVE[*].ID 即可同时兼容两种输入场景。

效果验证:

  • 针对输入1(单对象):[*] 操作符会将单个CVE对象视为单元素数组进行遍历,最终返回 ["CVE-2022-26138"]
  • 针对输入2(数组):[*] 遍历数组中的每个元素,提取各自的ID字段,返回 ["CVE-2019-2969", "CVE-2019-3030"]

补充说明

这个表达式的兼容性依赖于JsonPath实现对[*]操作符的处理逻辑——多数主流库(如Jayway JsonPath)会自动将非数组的单个对象转换为单元素数组来处理[*]遍历,因此能同时适配两种结构。

如果你的JsonPath实现不支持这种自动转换,也可以使用联合表达式 $.CVE.ID | $.CVE[*].ID(部分库支持|作为或操作符),该表达式会同时尝试匹配两种路径,最终合并有效结果。

内容的提问来源于stack exchange,提问作者Vijay Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:05:14