Bash JSON Viewer โ jless & JQ_COLORS
Gunakan JSON Pretty Print gratis langsung di browser Anda โ tidak perlu instalasi.
Coba JSON Pretty Print Online โKetika Anda membutuhkan viewer JSON bash untuk eksplorasi interaktif alih-alih scripting, pipe standar jq . kurang memadai โ output bergulir melampaui bagian atas terminal dan Anda tidak memiliki cara untuk menavigasi kembali melalui respons API 300 baris. Panduan ini mencakup alat yang dibangun khusus untuk melihat JSON secara interaktif di terminal: jless (pohon yang dapat diciutkan dengan navigasi tombol vim), JQ_COLORS tema warna kustom, jq -C | less -R paging berwarna, alias shell untuk penggunaan sehari-hari, dan fx sebagai alternatif Node.js. Untuk scripting, CI/CD, dan alur kerja validasi, lihat panduan Format JSON di Bash yang menjadi pasangannya. Untuk viewer browser tanpa instalasi, alat Pemformat JSON bekerja secara instan. Contoh diuji pada Bash 5.x (macOS via Homebrew, Ubuntu 22.04+) dan kompatibel dengan Bash 3.2+ (shell sistem macOS).
- โข
jlessโ viewer JSON interaktif terbaik untuk terminal: pohon yang dapat diciutkan, tombol vim, pencarian inkremental - โข
jq -C . | less -Rโ pager berwarna yang dapat di-scroll tanpa instalasi tambahan selain jq - โข
JQ_COLORSโ variabel lingkungan yang mengkustomisasi skema warna ANSI jq untuk setiap tipe JSON - โข
fxโ viewer JSON interaktif Node.js dengan dukungan mouse dan ekspresi filter JavaScript - โข
alias jv='jless'โ perintah satu kata menjadikan penampilan interaktif kebiasaan otomatis
Penampilan JSON Interaktif vs. Berbasis Skrip
Mem-pipe JSON ke jq . adalah pilihan tepat saat Anda ingin output terformat untuk payload kecil, atau saat hasilnya diteruskan ke perintah lain. Ini pilihan yang salah saat Anda perlu menjelajahi respons API dengan 200 field โ output terbang melampaui jendela terminal dan membuat Anda tidak memiliki cara untuk menavigasi, menciutkan bagian, atau mencari field tertentu tanpa menjalankan ulang perintah dengan filter. Viewer JSON interaktif merender output yang sama โ terformat dan berwarna โ di dalam pager persisten tempat Anda mengontrol navigasi. Datanya identik; perbedaannya adalah antarmukanya.
# jq . โ output scrolls off screen for large responses curl -s https://api.github.com/users/torvalds | jq . # 300+ lines scroll past โ you lose context immediately
# jless โ opens an interactive pager, nothing scrolls off curl -s https://api.github.com/users/torvalds | jless # Full document visible, collapsible, searchable with j/k/h/l
jq dengan filter eksplisit dan penanganan kode keluar. Panduan Format JSON di Bash mencakup pola scripting tersebut.jless โ Viewer JSON Interaktif
jless adalah viewer JSON terminal yang dibuat khusus. Tidak seperti pipe jq biasa, ia merender dokumen sebagai pohon yang dapat diciutkan secara persisten: setiap objek dan array dapat diperluas atau diciutkan secara independen dengan l dan h, navigasi menggunakan tombol bergaya vim, dan pencarian inkremental menemukan kunci atau nilai apa pun secara instan. Ia melakukan streaming input secara inkremental, sehingga membuka file besar dan respons API dalam waktu kurang dari satu detik tanpa memperhatikan ukuran โ di mana jq menyangga seluruh dokumen sebelum menampilkan apa pun. Saya selalu menggunakan jless sebagai alat pertama setiap kali respons API terlalu besar untuk dipindai sekilas.
Instalasi
# macOS brew install jless # Linux โ prebuilt binary from 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/ # Verify jless --version
Penggunaan dasar
# Open a local file โ interactive tree viewer launches immediately jless api-response.json # Pipe any JSON stream directly into jless curl -s https://api.github.com/users/torvalds | jless # Open with all nodes collapsed to top level (useful starting point for large documents) jless --mode line api-response.json # Load a specific array element and view it in isolation jq '.[0]' deployments.json | jless
Navigasi dan pencarian dalam praktik
# Inside jless: # # j / โ move down # k / โ move up # l / โ expand node (or Enter) # h / โ collapse node # H collapse current + all siblings โ high-level overview # L expand everything recursively # # / start forward search โ type a key name and press Enter # n / N next / previous search match # # g / gg jump to start # G jump to end # q quit
Referensi Pintasan Keyboard jless
Semua pintasan tersedia segera setelah membuka jless โ tidak diperlukan konfigurasi. Model navigasi sengaja dibuat identik dengan vim sehingga kebiasaan otomatis yang sudah ada dapat digunakan.
jq -C | less -R โ Paging Berwarna Tanpa Alat Tambahan
Jika jless tidak terinstal dan Anda membutuhkan tampilan berwarna yang dapat di-scroll dari respons JSON, jq -C . | less -R adalah fallback yang mumpuni. Flag -C memaksa kode warna ANSI bahkan saat stdout adalah pipe (biasanya jq menghapusnya), dan -R memberi tahu less untuk merender kode tersebut alih-alih mencetaknya sebagai teks literal. Hasilnya adalah dokumen berwarna penuh yang dapat di-scroll โ tanpa struktur pohon interaktif dari jless. Navigasi di dalam less menggunakan tombol panah atau vim-style j/k, dan / memicu pencarian teks bawaan less.
# Basic colorized pager jq -C . response.json | less -R # From a curl response โ -s prevents progress bar from corrupting the JSON stream curl -s https://api.github.com/repos/jqlang/jq | jq -C . | less -R # Sort keys for easier visual scanning, then page jq -CS . config.json | less -R # -C = force color, -S = sort keys (both flags combined) # Add an alias so you never have to type the full pipe again alias jqv='jq -C . | less -R' # Usage: cat response.json | jqv # or: curl -s https://api.example.com/status | jqv
jq -C | less -R menyangga seluruh output terformat sebelum less dapat menampilkannya. Pada file 200 MB ini berarti menunggu beberapa detik dan menghabiskan memori yang signifikan โ keterbatasan yang sama seperti jq . biasa. Untuk file besar, gunakan jless yang melakukan streaming secara inkremental.JQ_COLORS โ Tema Warna Kustom
JQ_COLORS adalah variabel lingkungan yang mengganti skema warna ANSI default jq. Ia mengambil string yang dipisahkan titik dua berisi tujuh kode atribut ANSI;warna, satu per tipe JSON dalam urutan tetap ini: null : false : true : angka : string : array : objek. Setiap kode dalam format atribut;warna di mana atribut adalah 0 (normal), 1 (tebal), 2 (redup), atau 4 (bergaris bawah), dan warna adalah nomor warna ANSI standar (30โ37 = standar, 90โ97 = cerah).
# ANSI color reference for building JQ_COLORS: # Attributes: 0=normal 1=bold 2=dim 4=underline # Colors: 30=black 31=red 32=green 33=yellow # 34=blue 35=magenta 36=cyan 37=white # Bright: 90=bright-black 91=bright-red 92=bright-green 93=bright-yellow # 94=bright-blue 95=bright-magenta 96=bright-cyan 97=bright-white # # Order: null : false : true : numbers : strings : arrays : objects # High-contrast theme for dark terminals (recommended) export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96" # null=dim-gray, false=bright-red, true=bright-green, # numbers=bright-yellow, strings=green, arrays=bold-cyan, objects=bold-cyan # Solarized-style theme export JQ_COLORS="2;37:0;35:0;35:0;36:0;33:1;34:1;34" # null=dim-white, false=magenta, true=magenta, # numbers=cyan, strings=yellow, arrays=bold-blue, objects=bold-blue # Minimal (bold keys only, everything else plain) export JQ_COLORS="0;90:0;39:0;39:0;39:0;39:1;39:1;39"
# Add your chosen theme to ~/.bashrc or ~/.zshrc so it applies to every jq call
echo 'export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"' >> ~/.bashrc
source ~/.bashrc
# Test the theme
echo '{"active":true,"errors":null,"count":42,"tags":["api","v2"],"meta":{"version":"1.0"}}' | jq .JQ_COLORS harus memiliki tepat tujuh nilai yang dipisahkan titik dua. Jika string memiliki lebih sedikit segmen, jq diam-diam kembali ke default bawaan tanpa pesan error apa pun โ membuat kesalahan konfigurasi sulit didiagnosis. Selalu uji string warna baru pada payload JSON pendek sebelum menambahkannya ke profil shell Anda.Alias Shell untuk Penampilan JSON Sehari-hari
Perintah untuk penampilan JSON interaktif secara default cukup panjang. Sekumpulan alias kecil di ~/.bashrc atau ~/.zshrc menjadikan jless dan paging berwarna sebagai perintah satu kata yang terintegrasi secara alami ke dalam alur kerja apa pun. Alias di bawah ini dapat dikombinasikan โ jv dan jvp keduanya menerima input yang di-pipe atau nama file sebagai argumen pertama.
# Add to ~/.bashrc or ~/.zshrc
# jv โ interactive viewer (jless if available, colorized pager fallback)
jv() {
if command -v jless &>/dev/null; then
jless "$@"
else
jq -C . "$@" | less -R
fi
}
# jvp โ view with keys sorted alphabetically (useful for comparing responses)
alias jvp='jq -CS . | less -R'
# jvc โ view from clipboard (macOS)
alias jvc='pbpaste | jless'
# jvf โ view and filter: jvf '.users[0]' response.json
jvf() {
local filter="$1"; shift
jq -C "$filter" "$@" | less -R
}
# Reload without restarting terminal
source ~/.bashrc# Usage examples after adding aliases above # View any file or piped response jv deployment-config.json curl -s https://api.github.com/users/torvalds | jv # View sorted (easy to scan alphabetically) cat feature-flags.json | jvp # Drill into a sub-document interactively jvf '.database' infra/app-config.json jvf '.users[] | select(.role == "admin")' users.json
bat โ Penampilan File JSON dengan Sorotan Sintaks
bat adalah pengganti cat dengan sorotan sintaks, nomor baris, dan pager bawaan. Untuk file JSON di disk, ia menyediakan pengalaman membaca yang bersih bergaya editor tanpa membuka editor teks penuh. Tidak seperti jless, bat merender file sebagai teks statis โ tidak ada ciutan, tidak ada pencarian, tidak ada navigasi selain scrolling. Kekuatannya adalah kejelasan visual untuk file statis berukuran sedang (konfigurasi, fixture, payload pengujian) di mana Anda ingin warna sintaks dan nomor baris tetapi tidak memerlukan navigasi pohon interaktif.
# macOS brew install bat # Debian / Ubuntu (binary may be named batcat) apt-get install -y bat # alias bat=batcat # add to ~/.bashrc if needed on Ubuntu # View a JSON file with syntax highlighting and line numbers bat config/feature-flags.json # Disable pager โ print directly to terminal (useful in scripts) bat --paging=never api-response.json # Combine with jq: format with jq, view with bat (preserves bat's JSON highlighting) jq '.' response.json | bat --language=json --paging=never
bat untuk membaca file konfigurasi statis dan fixture pengujian di mana nomor baris penting (misalnya saat kegagalan pengujian merujuk baris 47 dari file fixture). Untuk respons API dan JSON dinamis dari curl, jless lebih cepat dibuka dan lebih praktis untuk dinavigasi. Jika perlu melihat di browser dan berbagi dengan rekan, tempelkan langsung ke alat Pemformat JSON โ tidak diperlukan terminal.fx โ Penjelajah JSON Interaktif Node.js
fx adalah viewer JSON interaktif yang dibangun di atas Node.js. Antarmukanya mirip dengan jless โ pohon yang dapat diciutkan, navigasi keyboard, pencarian โ tetapi menambahkan dua fitur yang tidak dimiliki jless: dukungan mouse (klik untuk memperluas/menciutkan node) dan kemampuan mengetikkan ekspresi JavaScript di bilah bawah untuk memfilter dokumen secara real time. Untuk tim yang sudah menjalankan Node.js, fx adalah pilihan yang alami dan tidak memerlukan binary terpisah. Untuk lingkungan terminal murni tanpa Node, jless adalah pilihan yang lebih ramping.
# Install globally via npm npm install -g fx # Or run without installing (npx caches the package) curl -s https://api.github.com/users/torvalds | npx fx # Basic interactive use fx api-response.json curl -s https://api.github.com/repos/jqlang/jq | fx # In fx: arrow keys navigate, Enter expands/collapses, / searches # Bottom bar accepts JavaScript expressions for live filtering: # .name โ show only the "name" field # .repos.slice(0,5) โ first 5 repos
# fx also works as a non-interactive formatter (like jq . but with JS syntax)
# Pass a JavaScript expression as argument โ no interactive mode
echo '{"users":[{"id":1,"name":"Sarah Chen"},{"id":2,"name":"Marcus Osei"}]}' \
| fx '.users[0].name'
# Sarah Chen
# Chain with map for array transformations
cat deployments.json | fx '.items.map(d => ({id: d.deploy_id, status: d.state}))'Kesalahan Umum
Empat kesalahan ini muncul berulang kali saat developer pertama kali mulai menggunakan viewer JSON terminal โ masing-masing memiliki solusi yang jelas setelah Anda memahami mengapa hal itu terjadi.
Masalah: jq . membuang semua output ke stdout sekaligus. Untuk respons yang lebih panjang dari tinggi terminal Anda, semua yang ada di atas layar terakhir hilang โ Anda tidak dapat scroll kembali ke awal atau menavigasi ke field tertentu.
Solusi: Pipe ke jless untuk navigasi interaktif, atau gunakan jq -C . | less -R sebagai fallback. Keduanya membuat dokumen lengkap tetap dapat diakses tanpa memperhatikan ukurannya.
# 300-line API response โ top 280 lines immediately scroll off curl -s https://api.github.com/users/torvalds | jq . # Only the bottom of the output is visible โ cannot navigate back
# Full document stays accessible in jless โ nothing is lost curl -s https://api.github.com/users/torvalds | jless # j/k to scroll, h/l to collapse/expand, / to search
Masalah: JQ_COLORS memerlukan tepat tujuh nilai yang dipisahkan titik dua. Jika string memiliki enam atau delapan nilai, jq diam-diam mengabaikan seluruh variabel dan kembali ke default bawaan โ tidak ada peringatan, tidak ada error, hanya warna yang salah.
Solusi: Hitung titik duanya: string JQ_COLORS yang valid memiliki tepat enam titik dua dan tujuh nilai. Echo variabel dan pipe ke tr untuk menghitung.
# Only 6 values โ jq silently uses defaults, no indication of why
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96"
echo '{"ok":true}' | jq . # colors unchanged โ no error shown# Exactly 7 values โ 6 colons export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96" # Verify the count before adding to shell profile echo "$JQ_COLORS" | tr -cd ':' | wc -c # must output 6
Masalah: jless dan fx merender antarmuka interaktifnya ke terminal (TTY), bukan ke stdout. Mem-pipe-nya ke grep, tee, atau perintah lain menghasilkan kode escape ANSI yang kacau atau output kosong โ output interaktif viewer tidak dirancang untuk dikonsumsi oleh program lain.
Solusi: Gunakan jq dengan filter eksplisit untuk mengekstrak data secara programatik. Gunakan jless dan fx hanya sebagai langkah akhir dalam pipeline saat manusia membaca output.
# jless output is for human eyes โ piping it produces garbage jless response.json | grep "request_id" # Output: ANSI escape codes and cursor sequences, not clean text
# Use jq for programmatic extraction โ clean, composable jq -r '.request_id' response.json | grep "req_" # Use jless only as the terminal endpoint โ nothing after it jless response.json
Masalah: -C memaksa kode warna ANSI ke dalam aliran output. Ketika aliran tersebut dicetak langsung ke terminal yang tidak dalam mode raw โ atau di-pipe ke alat yang tidak menginterpretasikan ANSI โ urutan escape muncul sebagai karakter literal seperti ^[[1;34m yang mengacaukan output.
Solusi: Selalu pasangkan jq -C dengan less -R. Flag -R menempatkan less ke mode raw-input, memberitahunya untuk merender urutan ANSI sebagai warna alih-alih mencetaknya sebagai teks.
# -C without -R: escape sequences print as raw text jq -C . response.json | less # Output: ^[[1;34m"status"^[[0m: ^[[0;32m"ok"^[[0m ...
# -C with -R: ANSI codes are rendered as actual colors jq -C . response.json | less -R # Output: colorized JSON, clean and readable
jless vs jq vs bat vs fx โ Perbandingan Viewer Interaktif
Keempat alat merender JSON berwarna, tetapi kemampuan interaktifnya berbeda secara signifikan. Pilih berdasarkan apakah Anda memerlukan navigasi yang dapat diciutkan, pencarian, atau dukungan mouse โ dan apakah Node.js sudah ada di lingkungan Anda.
Untuk sebagian besar situasi: instal jless sekali dan gunakan sebagai viewer interaktif default. Simpan jq -C . | less -R sebagai fallback untuk lingkungan yang tidak dapat menginstal binary tambahan. Tambahkan fx jika tim Anda berbasis Node.js dan menghargai navigasi mouse atau pemfilteran JavaScript langsung.
Pertanyaan yang Sering Diajukan
Bagaimana cara mencari kunci tertentu di dalam file JSON di terminal?
Di jless, tekan / untuk membuka prompt pencarian inkremental, ketik nama kunci, dan tekan Enter. Gunakan n untuk meloncat maju melalui kecocokan dan N untuk mundur. Pencarian bersifat case-sensitive secara default. Di jq -C | less -R, / memicu pencarian bawaan less yang mencocokkan teks mentah termasuk kode warna ANSI โ pencarian jless lebih andal untuk JSON terstruktur.
# Open file in jless, then press / to search jless api-response.json # In jless: type / โ "request_id" โ Enter โ n for next match # jq alternative: extract and print all matching keys to stdout jq '.. | objects | with_entries(select(.key == "request_id"))' api-response.json
Bagaimana cara menavigasi struktur JSON yang sangat bertingkat dengan pintasan keyboard?
jless mengikuti navigasi vim: j/k untuk naik/turun, h untuk menciutkan node, l untuk memperluasnya. Tekan H untuk menciutkan node saat ini dan semua saudaranya sekaligus โ berguna untuk mendapatkan gambaran tingkat tinggi sebelum menyelami cabang tertentu. L memperluas segalanya secara rekursif. Setelah menciutkan semua ke tingkat atas, perluas hanya jalur yang Anda inginkan dengan l.
# Open the response in jless curl -s https://api.github.com/repos/jqlang/jq | jless # In jless: # H โ collapse all top-level keys # j/k โ navigate to the key you want # l โ expand only that branch # gg โ return to root # G โ jump to last element
Bagaimana cara membuat output warna jq lebih mudah dibaca di terminal gelap?
Atur variabel lingkungan JQ_COLORS dengan kode atribut ANSI;warna untuk setiap tipe JSON. Tujuh posisi secara berurutan adalah: null, false, true, angka, string, array, objek. Taruh export di ~/.bashrc atau ~/.zshrc agar berlaku untuk setiap panggilan jq. Warna cerah tebal bekerja paling baik di latar belakang gelap.
# High-contrast theme for dark terminals โ add to ~/.bashrc or ~/.zshrc
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"
# null=gray, false=bright-red, true=bright-green,
# numbers=bright-yellow, strings=green, arrays/objects=bright-cyan
# Test immediately without reloading shell
echo '{"active":true,"errors":0,"tags":["api","v2"]}' | jq .Apa perbedaan antara jless dan jq . untuk melihat JSON?
jq . membuang semua output ke stdout sekaligus. Untuk respons yang lebih panjang dari tinggi terminal Anda, semua yang ada di atas layar terakhir hilang โ Anda tidak dapat scroll kembali ke awal atau menavigasi ke field tertentu tanpa menjalankan ulang perintah dengan filter. jless merender seluruh dokumen dalam pager persisten di mana Anda dapat scroll, mencari, menciutkan node, dan menavigasi dengan pintasan keyboard tanpa kehilangan konteks. Gunakan jq . saat ingin sekilas melihat payload kecil; gunakan jless saat perlu menjelajah.
# Small payload โ jq . is fine
echo '{"status":"ok","version":"2.4.1"}' | jq .
# Large or nested response โ jless is better
curl -s https://api.github.com/repos/jqlang/jq | jless
# โ interactive tree, no output scrolled off screenBagaimana cara melihat JSON dari respons curl secara interaktif di terminal?
Pipe curl langsung ke jless. Selalu sertakan -s (silent) untuk mencegah progress bar curl muncul di output. jless akan membuka viewer interaktif dengan respons penuh yang dirender sebagai pohon yang dapat diciutkan. Jika jless tidak terinstal, jq -C . | less -R memberikan pager berwarna sebagai fallback.
# Interactive exploration with jless curl -s https://api.github.com/users/torvalds | jless # Colorized pager fallback (no collapse, but still scrollable with color) curl -s https://api.github.com/users/torvalds | jq -C . | less -R
Bisakah saya melihat beberapa file JSON berdampingan di terminal?
jless membuka satu file sekaligus. Untuk perbandingan berdampingan, gunakan terminal multiplexer: tmux split-window -h membuka split vertikal, lalu jalankan jless di setiap panel dengan file yang berbeda. Alternatifnya, gunakan alat JSON Diff berbasis browser jika Anda perlu membandingkan dua dokumen secara struktural.
# tmux side-by-side: split horizontally, then run jless in each pane tmux split-window -h # Left pane: jless response-v1.json # Right pane: jless response-v2.json # Or use diff on jq-normalized output for a text diff diff <(jq -S . response-v1.json) <(jq -S . response-v2.json)
Alat Terkait
Alat Pemformat JSON memberikan tampilan yang dapat diciutkan dan berwarna yang sama seperti jless โ langsung di browser, tanpa instalasi dan tanpa terminal.
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.