【问题标题】:jq sort by value of keyjq 按键值排序
【发布时间】:2020-12-23 15:37:37
【问题描述】:

鉴于以下 JSON(为了示例而过度简化),我需要按键的值对键进行排序。在这种情况下,顺序应该是 id > name > type。

{
    "link": [{
            "attributes": [{
                    "value": "ConfigurationElement",
                    "name": "type"
                }, {
                    "value": "NAME1",
                    "name": "name"
                }, {
                    "value": "0026a8b4-ced6-410e-9213-e3fcb28b3aab",
                    "name": "id"
                }
            ],
            "href": "href1",
            "rel": "down"
        }, {
            "attributes": [{
                    "value": "0026a8b4-ced6-410e-9213-k23g15h2u1l5",
                    "name": "id"
                }, {
                    "value": "ConfigurationElement",
                    "name": "type"
                }, {
                    "value": "NAME2",
                    "name": "name"
                }
            ],
            "href": "href2",
            "rel": "down"
        }
    ],
    "total": 2
}

预期结果:

{
    "link": [{
            "attributes": [{
                    "value": "0026a8b4-ced6-410e-9213-e3fcb28b3aab",
                    "name": "id"
                }, {
                    "value": "NAME1",
                    "name": "name"
                }, {
                    "value": "ConfigurationElement",
                    "name": "type"
                }
            ],
            "href": "href1",
            "rel": "down"
        }, {
            "attributes": [{
                    "value": "0026a8b4-ced6-410e-9213-k23g15h2u1l5",
                    "name": "id"
                }, {
                    "value": "NAME2",
                    "name": "name"
                }, {
                    "value": "ConfigurationElement",
                    "name": "type"
                }
            ],
            "href": "href2",
            "rel": "down"
        }
    ],
    "total": 2
}

如果有人能帮助我,我将不胜感激。我用 -S 和 -s 用 sort_by() 尝试了 jq,但是这个例子太复杂了,我无法根据我目前对 jq 的经验来弄清楚。非常感谢!

【问题讨论】:

    标签: json sorting key jq


    【解决方案1】:

    你可以这样做:

    jq '.link[].attributes|=sort_by(.name)'
    

    |= 获取与.link[].attributes 匹配的所有路径,即每个“属性”数组,并将过滤器sort_by(.name) 应用于每个路径,其他所有内容保持不变。

    【讨论】:

    • jq 是一个如此神奇而强大的东西......我永远不会想到这一点!
    • 难以置信..在所有尝试之后,我开始失去希望,而答案是如此简短和干净。万分感谢!!!!干杯!
    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 2023-03-20
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多