сортировать ключи в произвольном порядке - PullRequest
1 голос
/ 27 марта 2020

Для побочного проекта я хочу отсортировать ключи JSON с помощью jq и найти следующее решение:

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 действительно ужасна.

Вопрос: есть ли способ сделать список сортировки менее избыточным?

Я думал о какой-то карте, но я не знаю, насколько это можно понять из более элегантного решения.

1 Ответ

2 голосов
/ 27 марта 2020

Чтобы указать ключи и их порядок:

 { beka, alma, paprika, korte }

Предостережение

Это работает только для ключей с "обычными" именами. Например, поскольку end является ключевым словом jq, вам необходимо написать:

{ "end": .end}

для ключа с именем "end", по крайней мере, с использованием существующих версий jq.

...