Администрирование FreeBSD, Linux, ... jq: утилита командной строки для обработки JSON Thu, May 28 2026  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


jq: утилита командной строки для обработки JSON Печать
Добавил(а) microsin   

jq — это консольная утилита, которая делает работу с JSON удобной. Вместо того чтобы мучительно выискивать данные с помощью `grep` и `sed`, вы пишете короткие выражения (фильтры), а jq их выполняет: ищет, вырезает, преобразует и форматирует.

[Установка]

Проще всего поставить jq через пакетный менеджер вашей системы:

Ваша система Команда для установки
macOS brew install jq
Ubuntu / Debian sudo apt-get install jq
CentOS / RHEL / Fedora sudo yum install jq
Windows choco install jq (через Chocolatey)

[Кирпичики: основные фильтры]

Язык запросов 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'
# Результат: "Alice"

3. Работа с массивами (`'.[]'`). Позволяет перебрать все элементы:

echo '["apple", "banana", "cherry"]' | jq '.[]'
# apple
# banana
# cherry

[Как это работает в реальном мире]

Самый частый сценарий: вы получаете от API огромный JSON-ответ, и вам нужно вытащить одно-два нужных значения.

● Вытаскиваем ID всех виртуальных машин в AWS:

aws ec2 describe-instances | jq -r '.Reservations[].Instances[].InstanceId'

Флаг `-r` убирает лишние кавычки, оставляя «чистый» текст.

● Ищем нужные элементы по условию:

# Найти все бананы жёлтого цвета
echo '[{"fruit":"apple"},{"fruit":"banana","color":"yellow"}]' | jq '.[] | select(.color=="yellow")'

● Достаём данные из 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 [options] --args < jq filter> [strings...]
jq [options] --jsonargs < jq filter> [JSON_TEXTS...]

jq это утилита командной строки, которая на входе принимает текст JSON, применяет е нему указанный фильтр и на выходе генерирует JSON.

Простейший фильтр это точка ., который копирует вход jq на выход без модификации, кроме форматирования. Более продвинутые фильры см. jq(1) manpage ("man jq") и/или https://jqlang.github.io/jq/.

Пример использования:

$ echo '{"foo": 0}' | jq .
{
  "foo": 0
}

Опции командной строки:

  -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[].

 

 

Добавить комментарий


Защитный код
Обновить

Top of Page