2016-11-24 61 views
0

目前这个工程:JQ - 选择包含数组或/和

jq -r '.[] | select(.hosts | contains('$array')).hostName') 

如果array = ["darwin","intel"]它返回一个包含两个达尔文“和”英特尔的对象。 如何让它返回包含达尔文的对象“和/或”英特尔?

回答

1

假设你的JQ有any/2,我推荐使用的intersectq/2定义如下:

def intersectq(a;b): any(a[]; . as $x | any(b[]; . == $x)); 

过滤器使用,然后简单地说:

.[] | select(intersectq(.hosts; $array)) | .hostName 

为:

jq --argjson array '["darwin","intel"]' -r -f program.jq hosts.json 
+0

谢谢,这工作!现在我需要弄清楚为什么 – pkpowell