jq-过滤器数组不包含

时间:2018-11-28 05:52:17

标签: json jq

我正在使用应用程序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

建议?

1 个答案:

答案 0 :(得分:3)

这应该有效:

jq '.[] | select(.tags | index("red") | not)' fruit.json

执行.tags[]时,它将一一遍历数组tags中的所有元素,这就是为什么您得到重复结果的原因。