如何根据属性值是否在数组中使用jq过滤JSON?

时间:2018-11-14 19:47:13

标签: json filtering jq

我需要根据数组中是否存在某些属性值来过滤一些JSON。

我有一些可行的方法,但是感觉就像是在跳动。有更整齐的方法吗?

输入

{"potato":4}

过滤器

select(.potato as $k | ([1,2,3,4] | any(. == $k)))

输出

{
  "potato": 4
}

jqplay链接 https://jqplay.org/s/Ts97jkk21K

1 个答案:

答案 0 :(得分:0)

这似乎不太合算吗?

[1,2,3,4] as $acceptable
| .potato as $k
| select( any($acceptable[];  . == $k) )

如果您的jq有IN/1,则可以跳过$k

[1,2,3,4] as $acceptable
| select(.potato | IN($acceptable[]))

例如,这种样式可以很容易地将$acceptable作为命令行参数来传递。

诱惑

易于选择的解决方案很容易被吸引,例如:

[1,2,3,4] as $acceptable
| select($acceptable[] == .potato)

在某些情况下(例如,如果$acceptable很短并且不包含重复项(假设我们想要any的语义)。但是anyIN具有短路语义,这可能是理想的,例如效率。