如何使用jq从JSON数组中选择具有特定ID的对象?

时间:2017-05-08 15:46:59

标签: json jq

我有一个包含对象数组的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

2 个答案:

答案 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)),但在实践中却非常快。