以任意顺序对键进行排序

时间:2020-03-27 12:28:10

标签: json sorting dictionary jq

对于副项目,我想使用jq对JSON的键进行排序,并提出以下解决方案:

def add_property_prefix:
    if .key == "beka" then "01__"+.key
    elif .key == "alma" then "02__"+.key
    elif .key == "paprika" then "03__"+.key
    elif .key == "korte" then "04__"+.key
    else .key end
;

def del_property_prefix:
    .key | sub("^[0-9]{2}__"; "")
;

to_entries
| map({ key: add_property_prefix, value: .value })
| sort_by(.key)
| map({ key: del_property_prefix, value: .value })
| from_entries

输入的JSON如下所示:

{
    "alma": 1,
    "beka": 2,
    "paprika": 3,
    "korte": 4
}

jq play link

虽然可行,但我有10个以上的键,因此add_property_prefix函数实在是太胖了。

问题:是否有办法减少排序列表的重复性?

我当时在考虑某种地图,但是我对jq不太了解,因此无法找到更优雅的解决方案。

1 个答案:

答案 0 :(得分:2)

要指定键及其顺序:

 { beka, alma, paprika, korte }

注意事项

这仅适用于具有“普通”名称的键。例如,由于end是一个jq关键字,因此您必须编写:

{ "end": .end}

对于名为“ end”的键,至少使用现存版本的jq。

相关问题