Шпаргалка по распространенным командам jq.
Более подробно о jq я писал здесь. Это шпаргалка с командами и функциями, которые я нашел полезными для быстрой справки.
Общие способы использования
Вот несколько распространенных способов использования jq.
Вывод из curl
1 2 | # получить Астрономическую картинку дня (APOD) curl -s https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY | jq |
(Обратите внимание, что передача в jq без скрипта jq просто отформатирует и раскрасит JSON. Отлично!)
Из файла JSON
Просто передайте путь к файлу после сценария jq.
1 | jq '.name' package.json |
В цепочке конвейеров
Вы, вероятно, захотите использовать команду -r (raw), если будете использовать ее в конвейере или сохранять вывод в переменную. Команда -r избавляется от форматирования, такого как кавычки и пробелы для одиночных значений. Для объектов выводится правильный JSON, поэтому он будет содержать кавычки.
1 2 3 | # это загружает последнюю версию APOD и сохраняет в файл url="https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY" curl -o apod.png "$(curl -s $url | jq -r '.hdurl')" |
Общие селекторы
Получение именованного свойства
1 | echo '{"id": 1, "name": "Cam"}' | jq '.id'`` |
1 | echo '{"nested": {"a": {"b": 42}}}' | jq '.nested.a.b' |
Получение элемента массива по индексу
1 | echo '[0, 1, 1, 2, 3, 5, 8]'' | jq '.[3]' |
Получение свойства элемента массива
1 | echo '[{"id": 1, "name": "Mario"}, {"id": 2, "name": "Luigi"}]'' | jq '.[1].name' |
Нарезка массива
Нарезает массив по индексу.
1 | echo '["a", "b", "c", "d"]'' | jq '.[1:3]'' |
Для перехода от начала или конца можно опустить первый или последний индекс.
1 | echo "["a", "b", "c", "d"] | jq '.[1:]'' |
Создание нового объекта
Синтаксис выглядит следующим образом: { myPropertyName: .propertyFromJSON }.
1 | echo '{ "a": 1, "b": 2 }' | jq '{ a: .b, b: .a }' |
Полезные функции
Ключи
Получает ключи объекта в виде массива.
1 2 | echo '{ "a": 1, "b": 2 }' | jq 'keys' |
Длина
Получает длину массива
1 | echo '[0, 1, 1, 2, 3, 5, 8]' | jq 'length' |
Или количество ключей верхнего уровня.
1 | echo '{"a": 1, "b": 2}' | jq 'length' |
Сжать массив
Сжать вложенный массив в один.
1 | echo '[1, 2, [3, 4]]'' | jq 'flatten' |
Все вышеперечисленные функции используются вместе, просто для развлечения.
Это позволяет получить общее количество зависимостей в файле package.json.
1 | jq -r '[(.dependencies, .devDependencies) | keys] | flatten | length' package.json |
Уникальность
Получает массив уникальных значений.
1 | echo '[1, 2, 2, 3]' | jq 'unique' |
Присоединение
Объединяет элементы массива с помощью разделителя.
1 | echo '{ "FirstName": "Cameron", "LastName": "Nokes" }' | jq '[.firstName, .lastName] | join("" ") |
Мы создаем массив свойств, которые мы хотим объединить, pipe to join, которому передается пробел в качестве разделителя.