【问题标题】:jq: output json array of objects to array of keys with objectsjq:将对象的json数组输出到带有对象的键数组
【发布时间】:2018-11-21 02:33:22
【问题描述】:

我希望使用 jq 而不是 Python 重新格式化一些 json。我有以下 json 对象数组。我希望将其更改为一组键。键的值应该是对象。

[{
        "repo_expire": "21,600 second(s) (last: Tue Nov 20 07:14:05 2018)",
        "repo_url": "http://repos.blah.com/CentOS/dev/6/os/x86_64/",
        "repo_tstsync": 0,
        "repo_id": "base",
        "repo_pkgs": "6,713",
        "repo_prdsync": 0,
        "repo_revision": 1530286202,
        "repo_name": "CentOS-6 - Base",
        "repo_size": "5.5 G",
        "repo_updated": "Fri Jun 29 08:37:23 2018"
    },
    {
        "repo_expire": "21,600 second(s) (last: Tue Nov 20 07:36:50 2018)",
        "repo_url": "http://blah.com/epel/dev/6/x86_64/",
        "repo_tstsync": 0,
        "repo_id": "epel",
        "repo_pkgs": "12,448",
        "repo_prdsync": 699,
        "repo_revision": 1542329363,
        "repo_name": "Extra Packages for Enterprise Linux 6 - x86_64",
        "repo_size": "11 G",
        "repo_updated": "Thu Nov 15 17:50:18 2018"
    },
    {
        "repo_expire": "21,600 second(s) (last: Tue Nov 20 07:44:05 2018)",
        "repo_url": "http://blah.com/CentOS/dev/6/extras/x86_64/",
        "repo_tstsync": "null",
        "repo_id": "extras",
        "repo_pkgs": 33,
        "repo_prdsync": "null",
        "repo_revision": 1537445728,
        "repo_name": "CentOS-6 - Extras",
        "repo_size": "12 M",
        "repo_updated": "Thu Sep 20 05:15:29 2018"
    }
]

以下是所需的输出。

{
    "repos": [{
        "CentOS-6 - Base": {
            "repo_expire": "21,600 second(s) (last: Tue Nov 20 01:14:05 2018)",
            "repo_url": "http://blah.com/CentOS/dev/6/os/x86_64/",
            "repo_tstsync": 0,
            "repo_id": "base",
            "repo_pkgs": "6,713",
            "repo_prdsync": 0,
            "repo_revision": 1530286202,
            "repo_size": "5.5 G",
            "repo_updated": "Fri Jun 29 08:37:23 2018"
        },
        "Extra Packages for Enterprise Linux 6 - x86_64": {
            "repo_expire": "21,600 second(s) (last: Tue Nov 20 01:36:50 2018)",
            "repo_url": "http://blah.com/epel/dev/6/x86_64/",
            "repo_tstsync": 0,
            "repo_id": "epel",
            "repo_pkgs": "12,448",
            "repo_prdsync": 699,
            "repo_revision": 1542329363,
            "repo_size": "11 G",
            "repo_updated": "Thu Nov 15 17:50:18 2018"
        },
        "CentOS-6 - Extras": {
            "repo_expire": "21,600 second(s) (last: Tue Nov 20 01:44:05 2018)",
            "repo_url": "http://blah.com/CentOS/dev/6/extras/x86_64/",
            "repo_tstsync": "null",
            "repo_id": "extras",
            "repo_pkgs": 33,
            "repo_prdsync": "null",
            "repo_revision": 1537445728,
            "repo_size": "12 M",
            "repo_updated": "Thu Sep 20 05:15:29 2018"
        }
    }]
}

我需要以某种方式从每个对象中获取 repo_name 键的值。这可能吗?

【问题讨论】:

    标签: json bash jq


    【解决方案1】:

    以下过滤器产生所需格式的结果,但在 Q 中标记为“所需”的输出与给定输入不完全匹配,我认为这是疏忽。

    {repos: map( {(.repo_name): del(.repo_name)} )}
    

    【讨论】:

    • 太好了!我什至没有走近我的路。 [to_entry[] | .value.repo_id ] 谢谢。我会尽快选择你的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-04-28
    • 2016-03-20
    • 2023-02-15
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    相关资源
    最近更新 更多