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.