Фильтры jq для повседневной работы, сгруппированные по задачам: доступ к значению, фильтрация и выбор, работа с коллекциями, преобразование значений и строк, сборка в новый объект или массив, обновление путей на месте, ветвление логики и продвинутая свёртка, плюс флаги командной строки, задающие ввод и вывод. Каждая строка сопоставляет фильтр с результатом, который он даёт.
jq — это фильтр: он читает JSON из stdin, выполняет конвейер выражений, разделённых пайпами, и пишет JSON в stdout. Точка — текущее значение; всё строится на ней. Быстрее всего учиться, пропуская реальные данные через рецепты ниже и наблюдая вывод. Запускайте их как jq 'фильтр' file.json или curl ... | jq 'фильтр'.
Справочная таблица · 65 записи
Рецепты jqExplained
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-скрипты могли его проверять.
Значение переменной окружения, прочитанное внутри фильтра.