如何用包含多个值的jq过滤json列表

jhdbpxl9  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(96)

我在敲打我的头,如何从一个json列表中排除一些记录,这些记录的属性有很多值。jq - How to filter a json that does not contain这是一个例子。
这个很好用

jq -C 'select( .Image | contains("rancher"))'

否定也很有效

jq -C 'select( .Image | contains("rancher")|not)'

但是扩展它以排除多个值使我感到困惑

echo $JSON | jq 'select( .Image | contains("rancher")|not or .Image | contains("jenkins")| not)'

给予我:
jq:错误(在:1):无法检查布尔值(true)和字符串(“jenkins”)的包含关系,解析错误:第1行第147列的,“”之前需要值

thtygnil

thtygnil1#

所以否定是个问题。jq管道从字符串变成了布尔值,所以在哪里用not写否定很重要。
这起作用了

'select( .Image | contains("rancher") or contains("jenkins") or contains("google") |not)'

然而这是一个更酷的方法,直接从列表中删除条目:

echo $JSONTABLE|jq -C 'del (.[]|select( .Image | contains("rancher") or contains("jenkins")))' > table.json

相关问题