我有一个json值,可以包含单个记录或数组,我需要提取这些记录的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返回空数组。
然后,我尝试使用JSONPath表达式$.CVE.*.ID
,结果是Input 1的array []为空,但Input 2的输出正确["CVE-2019-2969", "CVE-2019-3030"]
我的问题是,是否有一个JSONPath表达式可以在任一输入中提供非空结果?
2条答案
按热度按时间huwehgph1#
使用递归下降
..
:但是,请注意,如果对象包含嵌套的
ID
属性,那么它也会拾取这些属性。在https://json-everything.net/json-path上试用
jjjwad0x2#
通过使用过滤器
objects
和arrays
,你可以用不同的方式处理不同的类型,就像这里只对数组使用.[]
,然后,使用-n
和inputs
,你可以一次访问多个输入对象,从而将它们的值收集到一个最终的数组中。Demo