| jq: утилита командной строки для обработки JSON |
|
| Добавил(а) microsin | ||||||||||
|
jq — это консольная утилита, которая делает работу с JSON удобной. Вместо того чтобы мучительно выискивать данные с помощью `grep` и `sed`, вы пишете короткие выражения (фильтры), а jq их выполняет: ищет, вырезает, преобразует и форматирует. [Установка] Проще всего поставить jq через пакетный менеджер вашей системы:
[Кирпичики: основные фильтры] Язык запросов jq строится из фильтров, которые можно комбинировать через конвейер (`|`) — точно как в bash. Самый частый сценарий: вы получаете от API огромный JSON-ответ, и вам нужно вытащить одно-два нужных значения. 1. Красивый вывод (`'.'`). Превращает минифицированный JSON в читаемый: curl 'https://api.github.com/repos/jqlang/jq/commits' | jq '.' 2. Доступ к полю (`'.field'`). Извлекает значение конкретного ключа: echo '{"name": "Alice", "city": "Berlin"}' | jq '.name' 3. Работа с массивами (`'.[]'`). Позволяет перебрать все элементы: echo '["apple", "banana", "cherry"]' | jq '.[]' [Как это работает в реальном мире] Самый частый сценарий: вы получаете от API огромный JSON-ответ, и вам нужно вытащить одно-два нужных значения. ● Вытаскиваем ID всех виртуальных машин в AWS: aws ec2 describe-instances | jq -r '.Reservations[].Instances[].InstanceId' Флаг `-r` убирает лишние кавычки, оставляя «чистый» текст. ● Ищем нужные элементы по условию: # Найти все бананы жёлтого цвета ● Достаём данные из GitHub и формируем новую структуру: curl -s https://api.github.com/repos/jqlang/jq/issues | jq '.[0] | {title: .title, user: .user.login}' [Полезные ключи (опции)] `-r` (raw output): убирает кавычки вокруг строк. `-n` (null input): используйте для создания JSON с нуля, без входных данных. `-f` (from file): загружает сложный фильтр из внешнего файла. По сути, jq — это SQL командной строки, только для JSON. Если часто работаете с API в консоли, этот инструмент сэкономит вам часы. jq - commandline JSON processor [version 1.7] Usage: jq [options] < jq filter> [file...] jq это утилита командной строки, которая на входе принимает текст JSON, применяет е нему указанный фильтр и на выходе генерирует JSON. Простейший фильтр это точка ., который копирует вход jq на выход без модификации, кроме форматирования. Более продвинутые фильры см. jq(1) manpage ("man jq") и/или https://jqlang.github.io/jq/. Пример использования: $ echo '{"foo": 0}' | jq . Опции командной строки: -n, --null-input используется `null` в качестве одиночного входного значения; -R, --raw-input читает каждую линию как строку вместо JSON; -s, --slurp читает весь ввод в массив, и использует его как одиночное входное значение; -c, --compact-output компактный вывод вместо красивого (pretty-printed; -r, --raw-output выведет строки без esc-ов и кавычек; --raw-output0 применит -r и выведет NUL после каждого вывода; -j, --join-output применит -r и выведет без символа \n после каждого вывода; -a, --ascii-output выведет строки только символами ASCII, используя esc-последовательности; -S, --sort-keys сортирует ключи каждого объекта на выводе; -C, --color-output раскрашивает вывод JSON; -M, --monochrome-output запретит расцвеченный вывод; --tab использует табы для отступа; --indent n использует n пробелов для отступа (максимум 7 пробелов); --unbuffered сбрасывает (flush) выходной поток после каждого вывода; --stream анализирует входное значение в потоковом режиме; --stream-errors применит --stream и сообщит об ошибке парсинга в виде массива; --seq парсит ввод/вывод как application/json-seq; -f, --from-file file загрузит фильтр из файла; -L directory ищет модули из директории; --arg name value установит $name в значение строки; --argjson name value установит $name в значение JSON; --slurpfile name file установит $name в массив значений JSON, прочитанных из файла; --rawfile name file установит $name в строку содержимого файла; --args будет использовать остальные аргументы как позиционные строковые значения; --jsonargs будет использовать остальные аргументы как позиционные JSON-значения; -e, --exit-status установит код статуса завершения на основе вывода; -V, --version покажет версию; --build-configuration покажет конфигурацию сборки jq; -h, --help покажет подсказку; -- завершит обработку аргументов; Именованные аргументы также доступны как $ARGS.named[], в то время как позиционные аргументы доступны как $ARGS.positional[].
|