2017-05-08 73 views
1

我有一個包含對象的陣列的JSON文件(test.json):如何使用jq從JSON數組中選擇具有特定ID的對象?

[ 
    { 
     "name": "Test 1", 
     "id": 1 
    }, 
    { 
     "name": "Test 2", 
     "id": 2 
    }, 
    { 
     "name": "Test 3", 
     "id": 3 
    } 
] 

我想提取的所有對象中,具有一定的ID。我設法得到一個對象,如果我只想要一個特定的ID:jq 'map(select(.id == 2))' test.json

事情是,我有一個ID列表,說1和3.我如何得到一個只包含這些對象的列表?那麼在這個例子中,包含ID爲1和3的對象的列表?

您可以查看這裏的例子:https://jqplay.org/s/xQgpA4yJAz

回答

1

使用contains/1這個網頁上所提供的解決方案也可以同樣是使用==撰寫:

map(select(.id == (1,3))) 

提到這一點的主要原因是contains充滿了潛在的意外。 (舉個例子,如果.id是字符串值會發生什麼。)

不幸的是,無論是使用==contains如上計算上是低效的(這是O(M * N)),但在實踐中這是很快速。