Skip to content

Рецепты jq объяснённые

Фильтры jq для повседневной работы, сгруппированные по задачам: доступ к значению, фильтрация и выбор, работа с коллекциями, преобразование значений и строк, сборка в новый объект или массив, обновление путей на месте, ветвление логики и продвинутая свёртка, плюс флаги командной строки, задающие ввод и вывод. Каждая строка сопоставляет фильтр с результатом, который он даёт.

jq — это фильтр: он читает JSON из stdin, выполняет конвейер выражений, разделённых пайпами, и пишет JSON в stdout. Точка — текущее значение; всё строится на ней. Быстрее всего учиться, пропуская реальные данные через рецепты ниже и наблюдая вывод. Запускайте их как jq 'фильтр' file.json или curl ... | jq 'фильтр'.

Справочная таблица · 65 записи
65 of 65 rows
Доступ
Весь ввод, красиво отформатированный.
Значение по ключу или вложенным ключам.
Значение по ключу, имя которого содержит спецсимволы.
Первый элемент массива (отрицательный индекс считает с конца).
Каждый элемент массива или каждое значение объекта, на отдельной строке.
Значение по ключу или null, без ошибки, когда ключ отсутствует.
Фильтрация и выбор
Ввод без изменений, если cond истинно, иначе ничего.
Применяет expr к каждому элементу массива и собирает результаты.
Отсортированные имена ключей или значения объекта в виде массива.
Длина массива или строки, либо количество ключей в объекте.
Только элементы, у которых age больше 18, одним массивом.
Коллекции
Истина, когда хотя бы один или когда каждый элемент истинен либо проходит фильтр.
Истина, когда ключ k существует в объекте; in выполняет тот же тест со стороны ключа.
Первый элемент, последний или только первые n результатов f.
Наименьшее или наибольшее значение в массиве.
Числа от 0 до n, каждое отдельным результатом.
Вложенные массивы, свёрнутые в один плоский массив.
Истина, когда x встречается где-то во вводе; inside меняет роли местами.
Применяет f к каждому значению снизу вверх, затем пересобирает весь ввод.
Преобразование
Массив только из поля price каждого элемента.
Сумма массива чисел или слияние массива объектов.
Приводит значение к строке или числовую строку к числу.
Кодирует ввод как JSON-строку или base64.
Строка в нижнем регистре.
Строки
Строка со значением expr, вплетённым в текст.
Заменяет каждое совпадение шаблона или только первое на s.
Разбивает строку в массив по разделителю или склеивает массив в одну строку.
Проверяет строку на шаблон или извлекает совпадения и именованные группы.
Срезает префикс или суффикс, только когда он присутствует.
Истина или ложь: строка начинается или заканчивается на s.
Строка в верхнем регистре.
Массив, кодированный как CSV-строка, TSV-строка или экранированные аргументы оболочки.
Сборка
Новый объект только с полями id и name из ввода.
Массив значений name каждого элемента.
Массив объектов {key, value}, полученный из объекта.
Объект, собранный из массива объектов {key, value}.
Элементы, сгруппированные в подмассивы по их полю cat.
Сортирует по полю или оставляет один элемент на каждый уникальный id.
Обновление и пути
Обновляет значение по ключу, применяя к нему f.
Перезаписывает значение по ключу значением v.
Прибавляет n к значению count на месте.
Читает, записывает или удаляет значения по путям, заданным как массивы.
Управление и логика
a, если c истинно, иначе b, с elif для дополнительных ветвей.
Выполняет f, а при сбое f выполняет g с сообщением об ошибке.
Останавливается с ошибкой, несущей msg, если только try её не перехватит.
Никакого вывода; эта ветвь просто исчезает из результатов.
Объединяет значения истинности или инвертирует одно.
Продвинутое
Свёртывает весь массив в одну накопительную сумму.
Как reduce, но выдаёт состояние после каждого шага, а не только последнее.
Следующий ввод или все оставшиеся вводы, подтянутые внутри фильтра.
Значение как JSON-текст или JSON-текст, разобранный обратно в значение.
Base64-текст, декодированный обратно в исходную строку.
Присваивание глубоко в структуре, создающее недостающие уровни по пути.
a, если оно не null и не ложь, иначе b (значение по умолчанию).
Ввод с одним удалённым ключом.
Каждый путь во вводе как массив ключей, сверху вниз.
Переменные и CLI
Определяет $name как строку оболочки, используемую внутри фильтра.
Определяет $name из сырого JSON — для чисел, булевых значений, массивов или объектов.
Определяет $name как всё содержимое JSON-файла.
Печатает строковые результаты как есть, без кавычек и экранирования.
Печатает каждый результат компактно в одну строку, без отступов.
Запускает фильтр один раз на null, чтобы построить вывод из ничего.
Читает весь ввод в один массив до запуска фильтра.
Задаёт код выхода по последнему результату, чтобы shell-скрипты могли его проверять.
Значение переменной окружения, прочитанное внутри фильтра.