jq数组中包含的过滤器值

时间:2019-08-06 20:24:57

标签: json jq

我想要类似的东西

jq 'select(.x in [2,4])' <<<'[{"x":1}, {"x": 2}, {"x": 3}, {"x": 4}]'
[{"x": 2}, {"x": 4}]

我该怎么做?

2 个答案:

答案 0 :(得分:4)

这是一个有效的解决方案,它还具有简洁明了的优点:

[2,4] as $list
| map(.x as $x | select( any($list[]; . == $x )))

答案 1 :(得分:0)

或者,解决方案可能是这样的:

bash $ JSN='[{"x":1}, {"x": 2}, {"x": 3}, {"x": 4}]'
bash $ <<<$JSN jtc -w'[x]:<V>a:' -u[2,4] -u'<V>s' -pp -r
[ { "x": 2 }, { "x": 4 } ]
bash $ 

即使要求提供jq的解决方案,此处的JSON操作类型对于JSON还是很常见的,因此请使用基于walk-path的unix实用程序jtc

jtc参数的详细说明:

  • 步行路径[x]:<V>a:将找到每个x值(1,然后是2等),并将找到的值存储到变量V < / li>
  • 对于每个步行(找到的值),都会发生相应的更新操作步行-将在提供的 static JSON(V)中搜索存储在[2,4]中的值

这里的更新操作是虚拟的-除非应用选项-pp,否则它本身就没有意义(b / c它将使用找到的值更新一个值),它将删除所有其他未更新的元素。 / p>

PS>披露:我是jtc-用于JSON操作的shell cli工具的创建者