Как отсортировать / уникальный вывод используя jq - PullRequest
1 голос
/ 22 января 2020

У меня есть json, как показано ниже:

% cat example.json
{
    "values" : [
        {
            "title": "B",
            "url": "https://B"
        },
        {
            "title": "A",
            "url": "https://A"
        }
    ]
}

Я хочу отсортировать значения на основе заголовка. т.е. ожидаемый результат

{
  "title": "A",
  "url": "https://A"
}
{
  "title": "B",
  "url": "https://B"
}

Пробовал удар. Не работает:

% jq '.values[] | sort' example.json           
jq: error (at example.json:12): object ({"title":"B...) cannot be sorted, as it is not an array

% jq '.values[] | sort_by(.title)' example.json
jq: error (at example.json:12): Cannot index string with string "title"

1 Ответ

1 голос
/ 22 января 2020

Если вы хотите сохранить общую структуру, вы должны использовать фильтр jq:

.values |= sort_by(.title)

Если вы хотите извлечь .values ​​и отсортировать массив, пропустите "=":

.values | sort_by(.title)

Чтобы создать вывод, как показано в Q:

.values | sort_by(.title)[]

Уникальность

Существует несколько способов определения «уникальности», а также несколько способов в какая уникальность может быть достигнута.

Один вариант будет просто использовать unique_by вместо sort_by; другой (с другой семантикой) будет использовать (sort_by(.title)|unique) вместо sort_by(.title).

...