我有一个由 gitlab 管道生成的report.json。
看起来像:
{"version":"14.0.4","vulnerabilities":[{"id":"64e69d1185ecc48a1943141dcb6dbd628548e725f7cef70d57403c412321aaa0","category":"secret_detection"....and so on
如果没有发现漏洞,则“漏洞”:[]。我正在尝试编写一个 bash 脚本来检查漏洞长度是否为空。如果没有,则打印漏洞密钥的值。可悲的是,我离脚本天才还很远,所以这是一场斗争。
在网上搜索解决方案时,我遇到了 jq.看起来 select() 应该完成这项工作。
我试过了:
jq "select(.vulnerabilities!= null)" report.json
但它回来了{"version":"14.0.4","vulnerabilities":[{"id":"64e69d1185ecc48a194314...
而不是预期的"vulnerabilities":[{"id":"64e69d1185ecc48a194314...
and
map(select(.vulnerabilities != null)) report.json
返回“未找到匹配项”
除了我对 bash 和 JSON 解析的 0 经验之外,你介意指出什么问题吗? :)
提前致谢
首先,请注意,在 JSON 世界中,区分很重要
之间[]
(空数组),值0
and null
,以及缺少值(例如,由于对象中缺少键)。
下面,我假设输出应该是 .vulnerability 的值
如果不是“[]”,或者没有其他内容:
< sample.json jq '
select(.vulnerabilities != []).vulnerabilities
'
如果目标是根据 jq 的返回代码区分两种情况,您可以使用 -e 命令行选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)