【问题标题】:How to select objects with specific IDs from a JSON array with jq?如何使用 jq 从 JSON 数组中选择具有特定 ID 的对象?
【发布时间】:2017-10-06 17:02:48
【问题描述】:

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

【问题讨论】:

    标签: json jq


    【解决方案1】:

    本页介绍的使用contains/1 的解决方案也可以使用== 编写:

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

    之所以提到这一点,主要是因为contains充满了潜在的惊喜。 (例如,考虑一下,如果 .id 是字符串值会发生什么。)

    不幸的是,使用上述==contains 的计算效率很低(它是 O(m*n)),但实际上它非常快。

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-02
        • 2018-05-07
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 2020-02-10
        • 1970-01-01
        相关资源
        最近更新 更多