使用jq选择键与多个值之一匹配的JSON对象

bvjveswy  于 2023-05-08  发布在  其他
关注(0)|答案(2)|浏览(158)

假设我在一个Bash变量中有几个JSON对象:

json='{"key":"100"}{"key":"200"}{"key":"300"}'

要选择key匹配100的对象,我可以执行以下操作:

printf '%s\n' "$json" | jq 'select ( .key == "100" )'

正如@axiac在评论中指出的那样,我可以使用or来匹配几个值中的一个。

printf '%s\n' "$json" | jq 'select(.key == "100" or .key == "200")

但是,如果我需要将key与大量的值进行匹配,在这种情况下使用or会变得很麻烦,那该怎么办?
什么代码会选择所有key值在99到201之间的对象?

k7fdbhmy

k7fdbhmy1#

是否选择键值在99到201之间的所有对象?
将“between”解释为“strictly between”,一种方式是:

select(.key | tonumber | 99<. and .<201 )

以匹配多个值中的一个
当可以将值指定为流时,也可以使用IN/1

select(.key | tonumber | IN(range(100;200)))

当然,在当前情况下,上述第一解决方案(使用“0”)将更有效。

5jdjgkvh

5jdjgkvh2#

printf '%s\n' "$json" |jq 'select((.key|tonumber >=100) and (.key|tonumber <=200))'

相关问题