我有一个包含对象数组的JSON文件( test.json ):
[
{
"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
答案 0 :(得分:2)
jq 'map(select(.id | contains(1,3)))'
男人,jq太棒了
https://github.com/stedolan/jq/wiki/Cookbook#filter-objects-based-on-the-contents-of-a-key
答案 1 :(得分:1)
此页面上显示的使用contains/1
的解决方案也可以使用==
编写:
map(select(.id == (1,3)))
提到这一点的主要原因是contains
充满了潜在的惊喜。 (例如,考虑如果.id
是字符串值会发生什么。)
不幸的是,如上所述使用==
或contains
计算效率低(它是O(m * n)),但在实践中却非常快。