我正在使用应用程序jq从命令行过滤json文件。
https://stedolan.github.io/jq/
这是一个代表问题的不良示例。如何过滤此设置以包含所有非红色或非圆形的水果?
fruit.json:
[
{
"name": "banana",
"tags": [
"yellow",
"long"
]
},
{
"name": "apple",
"tags": [
"red",
"round"
]
},
{
"name": "orange",
"tags": [
"orange",
"round",
"colored"
]
}
]
这会找到所有红色水果:
jq '.[] | select(.tags[] == "red")' fruit.json
我如何找到所有非红色的水果?
是的,我知道在此示例中,出于不同目的的标签数组并不是很好的设计。现实世界中的数据具有很好的理由。我只是在寻找如何搜索数组不包含值的记录。
这给出了奇怪的结果,包括重复项,其中包括“ apple”,因为“ round”不是“ red”,因此匹配。
jq '.[] | select(.tags[] != "red")' fruit.json
建议?
答案 0 :(得分:3)
这应该有效:
jq '.[] | select(.tags | index("red") | not)' fruit.json
执行.tags[]
时,它将一一遍历数组tags
中的所有元素,这就是为什么您得到重复结果的原因。