Bash JSON Viewer — jless & JQ_COLORS
Используйте бесплатный JSON Pretty Print прямо в браузере — установка не требуется.
Попробовать JSON Pretty Print онлайн →Когда нужен просмотрщик JSON в bash для интерактивного исследования, а не для скриптинга, стандартный jq . не справляется — вывод прокручивается за верхнюю часть терминала, и нет возможности вернуться к 300-строчному ответу API. Это руководство охватывает инструменты, созданные специально для интерактивного просмотра JSON в терминале: jless (сворачиваемое дерево с vim-навигацией), JQ_COLORS для настройки цветовых тем, jq -C | less -R для цветной прокрутки, псевдонимы оболочки для ежедневного использования и fx как альтернатива на Node.js. Для скриптинга, CI/CD и рабочих процессов валидации см. сопутствующее руководство по форматированию JSON в Bash. Для браузерного просмотра без установки инструмент JSON Pretty Print работает мгновенно. Примеры протестированы на Bash 5.x (macOS через Homebrew, Ubuntu 22.04+) и совместимы с Bash 3.2+ (системная оболочка macOS).
- •
jless— лучший интерактивный JSON-просмотрщик для терминала: сворачиваемое дерево, vim-клавиши, инкрементальный поиск - •
jq -C . | less -R— цветной прокручиваемый пейджер без дополнительной установки помимо jq - •
JQ_COLORS— переменная окружения для настройки ANSI-цветовой схемы jq для каждого типа JSON - •
fx— интерактивный JSON-просмотрщик на Node.js с поддержкой мыши и JavaScript-фильтрами - •
alias jv='jless'— однословная команда превращает интерактивный просмотр в привычку
Интерактивный vs. Скриптовый просмотр JSON
Передача JSON в jq . — правильный выбор для форматированного вывода небольших данных или когда результат подаётся в другую команду. Это неверный выбор, когда нужно исследовать ответ API с 200 полями — вывод промелькнёт в окне терминала и не даст никакой возможности навигировать, сворачивать разделы или искать конкретное поле без повторного запуска команды с фильтром. Интерактивные JSON-просмотрщики отображают тот же форматированный и цветной вывод внутри постоянного пейджера с управляемой навигацией. Данные идентичны; разница — в интерфейсе.
# jq . — вывод прокручивается за экран для больших ответов curl -s https://api.github.com/users/torvalds | jq . # 300+ строк прокручиваются — контекст теряется мгновенно
# jless — открывает интерактивный пейджер, ничего не прокручивается curl -s https://api.github.com/users/torvalds | jless # Полный документ виден, сворачиваем, ищем с помощью j/k/h/l
jq с явными фильтрами и обработкой кодов выхода. Паттерны скриптинга рассмотрены в руководстве по форматированию JSON в Bash.jless — Интерактивный JSON-просмотрщик
jless — специализированный терминальный JSON-просмотрщик. В отличие от простого пайпа через jq, он отображает документ как постоянное сворачиваемое дерево: каждый объект и массив можно независимо разворачивать и сворачивать с помощью l и h, навигация использует vim-клавиши, а инкрементальный поиск мгновенно находит любой ключ или значение. Он читает ввод потоково, поэтому открывает большие файлы и ответы API менее чем за секунду независимо от размера — там, где jq буферизует весь документ перед отображением. Я первым делом тянусь к jless, когда ответ API слишком большой для беглого просмотра.
Установка
# macOS brew install jless # Linux — готовый бинарник с GitHub Releases curl -sL https://github.com/PaulJuliusMartinez/jless/releases/latest/download/jless-x86_64-unknown-linux-gnu.tar.gz \ | tar xz sudo mv jless /usr/local/bin/ # Проверка jless --version
Базовое использование
# Открыть локальный файл — интерактивный просмотрщик запускается немедленно jless api-response.json # Передать любой JSON-поток прямо в jless curl -s https://api.github.com/users/torvalds | jless # Открыть с всеми узлами, свёрнутыми до верхнего уровня (удобная отправная точка для больших документов) jless --mode line api-response.json # Загрузить конкретный элемент массива и просмотреть отдельно jq '.[0]' deployments.json | jless
Навигация и поиск на практике
# Внутри jless: # # j / ↓ вниз # k / ↑ вверх # l / → развернуть узел (или Enter) # h / ← свернуть узел # H свернуть текущий + всех соседей → обзор верхнего уровня # L развернуть всё рекурсивно # # / начать поиск вперёд — введите имя ключа и нажмите Enter # n / N следующее / предыдущее совпадение # # g / gg перейти к началу # G перейти к концу # q выйти
Справочник клавиш jless
Все клавиши доступны сразу после открытия jless — никакой настройки не требуется. Модель навигации намеренно идентична vim, чтобы существующая мышечная память переносилась.
jq -C | less -R — Цветная прокрутка без дополнительных инструментов
Если jless не установлен и нужен прокручиваемый цветной вид JSON-ответа, jq -C . | less -R является хорошим запасным вариантом. Флаг -C принудительно включает ANSI-коды цветов даже когда stdout является пайпом (обычно jq их убирает), а -R говорит less интерпретировать коды вместо вывода их как буквальный текст. Результат — полностью цветной, прокручиваемый документ — без интерактивной структуры дерева jless. Навигация внутри less использует клавиши со стрелками или vim-клавиши j/k, а / запускает встроенный текстовый поиск less.
# Базовый цветной пейджер jq -C . response.json | less -R # Из curl-ответа — -s предотвращает попадание индикатора прогресса в JSON-поток curl -s https://api.github.com/repos/jqlang/jq | jq -C . | less -R # Сортировать ключи для удобного визуального сканирования, затем просматривать jq -CS . config.json | less -R # -C = принудительный цвет, -S = сортировка ключей (оба флага объединены) # Добавить псевдоним, чтобы не набирать полный пайп каждый раз alias jqv='jq -C . | less -R' # Использование: cat response.json | jqv # или: curl -s https://api.example.com/status | jqv
jq -C | less -R буферизует весь форматированный вывод прежде чем less сможет его отобразить. На файле 200 МБ это означает ожидание нескольких секунд и значительный расход памяти — то же ограничение, что у обычного jq .. Для больших файлов используйте jless, который читает данные потоково.JQ_COLORS — Настройка цветовых тем
JQ_COLORS — переменная окружения, переопределяющая стандартную ANSI-цветовую схему jq. Она принимает строку из семи кодов вида attribute;color, разделённых двоеточиями, по одному для каждого типа JSON в фиксированном порядке: null : false : true : числа : строки : массивы : объекты. Каждый код имеет формат атрибут;цвет, где атрибут — это 0 (обычный), 1 (жирный), 2 (тусклый) или 4 (подчёркнутый), а цвет — стандартный номер ANSI (30–37 = стандартные, 90–97 = яркие).
# Справочник ANSI-цветов для построения JQ_COLORS: # Атрибуты: 0=обычный 1=жирный 2=тусклый 4=подчёркнутый # Цвета: 30=чёрный 31=красный 32=зелёный 33=жёлтый # 34=синий 35=пурпурный 36=голубой 37=белый # Яркие: 90=ярко-чёрный 91=ярко-красный 92=ярко-зелёный 93=ярко-жёлтый # 94=ярко-синий 95=ярко-пурпурный 96=ярко-голубой 97=ярко-белый # # Порядок: null : false : true : числа : строки : массивы : объекты # Высококонтрастная тема для тёмных терминалов (рекомендуется) export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96" # null=тёмно-серый, false=ярко-красный, true=ярко-зелёный, # numbers=ярко-жёлтый, strings=зелёный, arrays=жирный-голубой, objects=жирный-голубой # Тема в стиле Solarized export JQ_COLORS="2;37:0;35:0;35:0;36:0;33:1;34:1;34" # null=тусклый-белый, false=пурпурный, true=пурпурный, # numbers=голубой, strings=жёлтый, arrays=жирный-синий, objects=жирный-синий # Минималистичная (только жирные ключи, всё остальное обычное) export JQ_COLORS="0;90:0;39:0;39:0;39:0;39:1;39:1;39"
# Добавьте выбранную тему в ~/.bashrc или ~/.zshrc для применения ко всем вызовам jq
echo 'export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"' >> ~/.bashrc
source ~/.bashrc
# Тест темы
echo '{"active":true,"errors":null,"count":42,"tags":["api","v2"],"meta":{"version":"1.0"}}' | jq .JQ_COLORS должна содержать ровно семь значений, разделённых двоеточиями. Если строка содержит меньше сегментов, jq молча возвращается к встроенным настройкам без какого-либо сообщения об ошибке — из-за чего некорректная конфигурация сложно диагностируется. Всегда тестируйте новую строку цветов на коротком JSON-пейлоаде перед добавлением в профиль оболочки.Псевдонимы оболочки для ежедневного просмотра JSON
Команды для интерактивного просмотра JSON по умолчанию многословны. Небольшой набор псевдонимов в ~/.bashrc или ~/.zshrc делает jless и цветную прокрутку однословными командами, которые органично вписываются в любой рабочий процесс. Псевдонимы ниже компонуются — jv и jvp принимают и пайпный ввод, и имя файла первым аргументом.
# Добавьте в ~/.bashrc или ~/.zshrc
# jv — интерактивный просмотрщик (jless если доступен, иначе цветной пейджер)
jv() {
if command -v jless &>/dev/null; then
jless "$@"
else
jq -C . "$@" | less -R
fi
}
# jvp — просмотр с ключами, отсортированными по алфавиту (удобно для сравнения ответов)
alias jvp='jq -CS . | less -R'
# jvc — просмотр из буфера обмена (macOS)
alias jvc='pbpaste | jless'
# jvf — просмотр с фильтром: jvf '.users[0]' response.json
jvf() {
local filter="$1"; shift
jq -C "$filter" "$@" | less -R
}
# Перезагрузка без перезапуска терминала
source ~/.bashrc# Примеры использования после добавления псевдонимов # Просмотр файла или пайпного ответа jv deployment-config.json curl -s https://api.github.com/users/torvalds | jv # Просмотр с сортировкой (удобно сканировать по алфавиту) cat feature-flags.json | jvp # Детальный просмотр поддокумента jvf '.database' infra/app-config.json jvf '.users[] | select(.role == "admin")' users.json
bat — Просмотр JSON-файлов с подсветкой синтаксиса
bat — замена cat с подсветкой синтаксиса, номерами строк и встроенным пейджером. Для JSON-файлов на диске он обеспечивает чистый просмотр в стиле редактора без открытия полноценного текстового редактора. В отличие от jless, bat отображает файл как статический текст — без сворачивания, без поиска, без навигации помимо прокрутки. Его сила — визуальная чёткость для статических файлов среднего размера (конфиги, фикстуры, тестовые пейлоады), где нужна подсветка синтаксиса и номера строк, но не нужна интерактивная навигация по дереву.
# macOS brew install bat # Debian / Ubuntu (бинарник может называться batcat) apt-get install -y bat # alias bat=batcat # добавьте в ~/.bashrc если нужно на Ubuntu # Просмотр JSON-файла с подсветкой синтаксиса и номерами строк bat config/feature-flags.json # Отключить пейджер — вывод прямо в терминал (полезно в скриптах) bat --paging=never api-response.json # Комбинировать с jq: форматировать через jq, просматривать через bat (сохраняет подсветку JSON) jq '.' response.json | bat --language=json --paging=never
bat для чтения статических конфигурационных файлов и тестовых фикстур, где важны номера строк (например, когда падение теста ссылается на строку 47 в файле фикстуры). Для ответов API и динамического JSON из curl jless быстрее открывается и удобнее для навигации. Если нужно просмотреть в браузере и поделиться с коллегой, вставьте прямо в инструмент JSON Pretty Print — терминал не нужен.fx — Интерактивный JSON-обозреватель на Node.js
fx — интерактивный JSON-просмотрщик на Node.js. Его интерфейс похож на jless — сворачиваемое дерево, клавиатурная навигация, поиск — но добавляет две функции, которых нет в jless: поддержка мыши (клик для разворачивания/сворачивания узлов) и возможность ввести JavaScript-выражение в нижней строке для фильтрации документа в реальном времени. Для команд, уже использующих Node.js, fx подходит органично и не требует отдельного бинарника. Для чистых терминальных сред без Node jless — более легковесный выбор.
# Глобальная установка через npm npm install -g fx # Или запуск без установки (npx кеширует пакет) curl -s https://api.github.com/users/torvalds | npx fx # Базовое интерактивное использование fx api-response.json curl -s https://api.github.com/repos/jqlang/jq | fx # В fx: клавиши со стрелками для навигации, Enter для разворачивания/сворачивания, / для поиска # Нижняя строка принимает JavaScript-выражения для живой фильтрации: # .name → показать только поле "name" # .repos.slice(0,5) → первые 5 репозиториев
# fx также работает как неинтерактивный форматтер (как jq . но с JS-синтаксисом)
# Передайте JavaScript-выражение как аргумент — без интерактивного режима
echo '{"users":[{"id":1,"name":"Sarah Chen"},{"id":2,"name":"Marcus Osei"}]}' \
| fx '.users[0].name'
# Sarah Chen
# Цепочка с map для преобразования массивов
cat deployments.json | fx '.items.map(d => ({id: d.deploy_id, status: d.state}))'Типичные ошибки
Четыре ошибки, которые встречаются снова и снова, когда разработчики начинают использовать терминальные JSON-просмотрщики — у каждой есть чёткое решение, как только понимаешь причину.
Проблема: jq . сбрасывает весь вывод в stdout сразу. Для ответов длиннее высоты терминала всё, что выше последнего экрана, исчезает — нельзя прокрутить назад к началу или перейти к конкретному полю.
Решение: Используйте пайп в jless для интерактивной навигации, или jq -C . | less -R как запасной вариант. Оба сохраняют весь документ доступным независимо от размера.
# 300-строчный ответ API — первые 280 строк сразу прокручиваются curl -s https://api.github.com/users/torvalds | jq . # Виден только конец вывода — вернуться назад нельзя
# Полный документ доступен в jless — ничего не теряется curl -s https://api.github.com/users/torvalds | jless # j/k для прокрутки, h/l для сворачивания/разворачивания, / для поиска
Проблема: JQ_COLORS требует ровно семь значений, разделённых двоеточиями. Если строка содержит шесть или восемь значений, jq молча игнорирует всю переменную и возвращается к встроенным настройкам — без предупреждений, без ошибок, просто неправильные цвета.
Решение: Посчитайте двоеточия: в корректной строке JQ_COLORS ровно шесть двоеточий и семь значений. Выведите переменную и передайте в tr для подсчёта.
# Только 6 значений — jq молча использует настройки по умолчанию, без указания причины
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96"
echo '{"ok":true}' | jq . # цвета не изменились — ошибка не показана# Ровно 7 значений — 6 двоеточий export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96" # Проверить количество перед добавлением в профиль оболочки echo "$JQ_COLORS" | tr -cd ':' | wc -c # должно вывести 6
Проблема: jless и fx выводят свой интерактивный интерфейс в терминал (TTY), а не в stdout. Передача их в grep, tee или любую другую команду производит искажённые ANSI escape-коды или пустой вывод — интерактивный вывод просмотрщика не предназначен для обработки другими программами.
Решение: Используйте jq с явным фильтром для программного извлечения данных. Используйте jless и fx только как финальный шаг в пайплайне, когда человек читает вывод.
# Вывод jless предназначен для людей — передача его производит мусор jless response.json | grep "request_id" # Вывод: ANSI escape-коды и управляющие последовательности, не чистый текст
# Используйте jq для программного извлечения — чисто и компонуемо jq -r '.request_id' response.json | grep "req_" # Используйте jless только как конечную точку в терминале — ничего после него jless response.json
Проблема: -C принудительно включает ANSI-коды цветов в поток вывода. Когда этот поток выводится напрямую в терминал не в raw-режиме — или передаётся инструменту, не интерпретирующему ANSI — escape-последовательности появляются как буквальные символы, например ^[[1;34m, засоряющие вывод.
Решение: Всегда сочетайте jq -C с less -R. Флаг -R переводит less в режим raw-input, заставляя его интерпретировать ANSI-последовательности как цвета вместо вывода их как текст.
# -C без -R: escape-последовательности выводятся как сырой текст jq -C . response.json | less # Вывод: ^[[1;34m"status"^[[0m: ^[[0;32m"ok"^[[0m ...
# -C с -R: ANSI-коды интерпретируются как настоящие цвета jq -C . response.json | less -R # Вывод: цветной JSON, чистый и читаемый
jless vs jq vs bat vs fx — Сравнение интерактивных просмотрщиков
Все четыре инструмента отображают цветной JSON, но их интерактивные возможности существенно различаются. Выбирайте исходя из того, нужна ли сворачиваемая навигация, поиск или поддержка мыши — и есть ли Node.js в вашей среде.
В большинстве случаев: установите jless один раз и используйте как интерактивный просмотрщик по умолчанию. Держите jq -C . | less -R как запасной вариант для сред, где нельзя устанавливать дополнительные бинарники. Добавьте fx если ваша команда работает в первую очередь на Node.js и ценит навигацию мышью или живую JavaScript-фильтрацию.
Часто задаваемые вопросы
Как найти конкретный ключ в JSON-файле в терминале?
В jless нажмите /, чтобы открыть строку инкрементального поиска, введите имя ключа и нажмите Enter. Используйте n для перехода к следующему совпадению и N для предыдущего. Поиск чувствителен к регистру по умолчанию. В jq -C | less -R символ / запускает встроенный поиск less, который сопоставляет сырой текст включая ANSI-коды цветов — поиск в jless надёжнее для структурированного JSON.
# Открыть файл в jless, затем нажать / для поиска jless api-response.json # В jless: введите / → "request_id" → Enter → n для следующего совпадения # Альтернатива через jq: извлечь и вывести все совпадающие ключи jq '.. | objects | with_entries(select(.key == "request_id"))' api-response.json
Как навигировать по глубоко вложенной JSON-структуре с помощью клавиатуры?
jless копирует навигацию vim: j/k для движения вверх/вниз, h для сворачивания узла, l для разворачивания. Нажмите H, чтобы свернуть текущий узел и всех соседей сразу — полезно для получения общего обзора перед углублением в конкретную ветку. L разворачивает всё рекурсивно. Свернув всё до верхнего уровня, разворачивайте только нужный путь с помощью l.
# Открыть ответ в jless curl -s https://api.github.com/repos/jqlang/jq | jless # В jless: # H → свернуть все ключи верхнего уровня # j/k → перейти к нужному ключу # l → развернуть только эту ветку # gg → вернуться к корню # G → перейти к последнему элементу
Как сделать цветной вывод jq удобнее для чтения на тёмном терминале?
Задайте переменную окружения JQ_COLORS с кодами ANSI attribute;color для каждого типа JSON. Семь позиций в порядке: null, false, true, числа, строки, массивы, объекты. Добавьте export в ~/.bashrc или ~/.zshrc для применения ко всем вызовам jq. Жирный яркий цвет лучше всего смотрится на тёмном фоне.
# Высококонтрастная тема для тёмных терминалов — добавьте в ~/.bashrc или ~/.zshrc
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"
# null=серый, false=ярко-красный, true=ярко-зелёный,
# numbers=ярко-жёлтый, strings=зелёный, arrays/objects=ярко-голубой
# Тест без перезагрузки оболочки
echo '{"active":true,"errors":0,"tags":["api","v2"]}' | jq .В чём разница между jless и jq . для просмотра JSON?
jq . прокручивает вывод мимо верхней части терминала и не даёт возможности вернуться назад — удобно для небольших ответов, но непрактично для всего свыше 50 строк. jless отображает весь документ в интерактивном пейджере, где можно прокручивать, искать, сворачивать узлы и навигировать с клавиатуры без потери контекста. Используйте jq . для быстрого просмотра небольших данных; jless — когда нужно исследовать.
# Небольшие данные — jq . подходит
echo '{"status":"ok","version":"2.4.1"}' | jq .
# Большой или вложенный ответ — лучше jless
curl -s https://api.github.com/repos/jqlang/jq | jless
# → интерактивное дерево, ничего не прокручивается за экранКак интерактивно просматривать JSON из ответа curl в терминале?
Передайте curl напрямую в jless. Всегда используйте -s (silent), чтобы индикатор прогресса curl не появлялся в выводе. jless откроет интерактивный просмотрщик с полным ответом в виде сворачиваемого дерева. Если jless не установлен, jq -C . | less -R обеспечит цветной пейджер в качестве запасного варианта.
# Интерактивное исследование через jless curl -s https://api.github.com/users/torvalds | jless # Запасной вариант — цветной пейджер (без сворачивания, но с прокруткой и цветом) curl -s https://api.github.com/users/torvalds | jq -C . | less -R
Можно ли просматривать несколько JSON-файлов рядом в терминале?
jless открывает по одному файлу за раз. Для сравнения рядом используйте терминальный мультиплексор: tmux split-window -h открывает вертикальное разделение, затем запустите jless в каждой панели с разными файлами. В качестве альтернативы используйте браузерный инструмент JSON Diff для структурного сравнения двух документов.
# tmux рядом: разделить горизонтально, затем запустить jless в каждой панели tmux split-window -h # Левая панель: jless response-v1.json # Правая панель: jless response-v2.json # Или использовать diff на нормализованном через jq выводе diff <(jq -S . response-v1.json) <(jq -S . response-v2.json)
Связанные инструменты
Инструмент JSON Pretty Print даёт тот же сворачиваемый, цветной вид, что и jless — прямо в браузере, без установки и без терминала.
Cora is a platform engineer who builds developer tooling and internal platforms, using Bash as the glue that connects components written in different languages and runtimes. She writes about cross-platform shell scripting, Bash utility functions, environment management, configuration templating, and the practical shell techniques that platform engineers use to build self-service tooling for development teams.
Nadia is a site reliability engineer who lives in the terminal. She writes Bash scripts that process logs, transform data, and orchestrate infrastructure across fleets of servers. She is a heavy user of jq, awk, and sed and writes about shell one-liners, text processing pipelines, data serialisation from the command line, and the practical Bash patterns that SREs reach for when speed matters more than elegance.