我需要根据数组中是否存在某些属性值来过滤一些JSON。
我有一些可行的方法,但是感觉就像是在跳动。有更整齐的方法吗?
输入
{"potato":4}
过滤器
select(.potato as $k | ([1,2,3,4] | any(. == $k)))
输出
{
"potato": 4
}
jqplay链接 https://jqplay.org/s/Ts97jkk21K
答案 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
的语义)。但是any
和IN
具有短路语义,这可能是理想的,例如效率。