如何使用JsonPath解析json字段中的单个记录或记录数组

8yparm6h  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(228)

我有一个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表达式可以在任一输入中提供非空结果?

huwehgph

huwehgph1#

使用递归下降..

$.CVE..ID

但是,请注意,如果对象包含嵌套的ID属性,那么它也会拾取这些属性。
https://json-everything.net/json-path上试用

jjjwad0x

jjjwad0x2#

通过使用过滤器objectsarrays,你可以用不同的方式处理不同的类型,就像这里只对数组使用.[],然后,使用-ninputs,你可以一次访问多个输入对象,从而将它们的值收集到一个最终的数组中。

jq -n '[inputs.CVE | objects, arrays[] | .ID]'

Demo

相关问题