$ command-helper

jq

Запросы и преобразование JSON в терминале: поля, массивы, фильтры, форматы вывода.

Потребуется вход через Google

Основы

Красиво вывести JSON
jq . <file>.json
Достать поле
jq '.name' <file>.json
Вложенное поле без кавычек в выводе
jq -r '.user.email' <file>.json
Ключи объекта
jq 'keys' <file>.json
Компактный вывод в одну строку
jq -c . <file>.json

Массивы

Поле каждого элемента
jq -r '.[].name' <file>.json
Длина массива
jq 'length' <file>.json
Первый элемент
jq '.[0]' <file>.json
Отфильтровать элементы по условию
jq '.[] | select(.status == "active")' <file>.json
Собрать новые объекты из элементов
jq '[.[] | {id, name: .user.name}]' <file>.json
Отсортировать по полю
jq 'sort_by(.createdAt) | reverse' <file>.json

Продвинутое

Подсчёт по полюпродвинутая
jq 'group_by(.status) | map({status: .[0].status, count: length})' <file>.json
Экспорт в CSVпродвинутая
jq -r '.[] | [.id, .name, .email] | @csv' <file>.json
Изменить поле и сохранитьпродвинутая
jq '.version = "1.2.3"' package.json > tmp.json && mv tmp.json package.json
Передать переменную shell в jqпродвинутая
jq --arg name "$NAME" '.[] | select(.name == $name)' <file>.json
Найти ключ в любом месте документапродвинутая
jq '.. | .<json_key>? // empty' <file>.json
Разобрать JSON-логи построчнопродвинутая
tail -f app.log | jq -R 'fromjson? | select(.level == "error")'