Bash JSON Viewer — jless & JQ_COLORS
Sử dụng Định dạng JSON đẹp miễn phí trực tiếp trên trình duyệt — không cần cài đặt.
Dùng thử Định dạng JSON đẹp trực tuyến →Khi bạn cần một bash JSON viewer để khám phá tương tác thay vì scripting, pipe tiêu chuẩn jq . không đủ khả năng — output cuộn qua đầu terminal và bạn không có cách nào điều hướng lại qua phản hồi API 300 dòng. Hướng dẫn này bao gồm các công cụ được xây dựng đặc biệt để xem JSON tương tác trong terminal: jless (cây có thể thu gọn với điều hướng phím vim), JQ_COLORS chủ đề màu tùy chỉnh, jq -C | less -R phân trang có màu, alias shell cho sử dụng hàng ngày, và fx như một lựa chọn thay thế Node.js. Để scripting, CI/CD và quy trình xác thực, xem hướng dẫn Định dạng JSON trong Bash kèm theo. Để có trình xem trình duyệt không cần cài đặt, công cụ Định dạng JSON đẹp hoạt động ngay lập tức. Các ví dụ được kiểm tra trên Bash 5.x (macOS qua Homebrew, Ubuntu 22.04+) và tương thích với Bash 3.2+ (shell hệ thống macOS).
- •
jless— trình xem JSON tương tác tốt nhất cho terminal: cây thu gọn được, phím vim, tìm kiếm tăng dần - •
jq -C . | less -R— pager có màu và có thể cuộn mà không cần cài đặt thêm ngoài jq - •
JQ_COLORS— biến môi trường tùy chỉnh sơ đồ màu ANSI của jq cho từng loại JSON - •
fx— trình xem JSON Node.js tương tác với hỗ trợ chuột và biểu thức filter JavaScript - •
alias jv='jless'— lệnh một từ biến việc xem tương tác thành thói quen cơ bắp
Xem JSON Tương tác vs. Theo Script
Pipe JSON sang jq . là lựa chọn đúng khi bạn muốn output có định dạng cho payload nhỏ, hoặc khi kết quả được đưa vào lệnh khác. Đó là lựa chọn sai khi bạn cần khám phá phản hồi API 200 field — output bay qua cửa sổ terminal và để lại cho bạn không có cách nào điều hướng, thu gọn các phần, hoặc tìm kiếm field cụ thể mà không chạy lại lệnh với filter. Các trình xem JSON tương tác render cùng output đã định dạng, có màu đó bên trong pager liên tục nơi bạn kiểm soát điều hướng. Dữ liệu giống hệt nhau; sự khác biệt là giao diện.
# 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 với filter tường minh và xử lý mã thoát. Hướng dẫn Định dạng JSON trong Bash bao gồm các pattern scripting đó.jless — Trình Xem JSON Tương Tác
jless là trình xem JSON terminal được xây dựng có mục đích. Khác với pipe jq thông thường, nó render tài liệu như một cây có thể thu gọn liên tục: mỗi object và array có thể được mở rộng hoặc thu gọn độc lập bằng l và h, điều hướng sử dụng phím kiểu vim, và tìm kiếm tăng dần tìm bất kỳ key hoặc giá trị nào ngay lập tức. Nó stream input tăng dần, vì vậy mở file lớn và phản hồi API trong dưới một giây bất kể kích thước — trong khi jq buffer toàn bộ tài liệu trước khi hiển thị bất cứ thứ gì. Tôi luôn chọn jless như công cụ đầu tiên bất cứ khi nào phản hồi API quá lớn để quét trong một lần nhìn.
Cài đặt
# 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
Sử dụng cơ bản
# 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
Điều hướng và tìm kiếm trong thực tế
# 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
Tài Liệu Tham Khảo Phím Tắt jless
Tất cả phím tắt có sẵn ngay sau khi mở jless — không cần cấu hình. Mô hình điều hướng cố ý giống với vim để thói quen cơ bắp hiện có được chuyển giao.
jq -C | less -R — Phân Trang Có Màu Không Cần Công Cụ Bổ Sung
Nếu jless chưa được cài đặt và bạn cần xem phản hồi JSON có màu và có thể cuộn, jq -C . | less -R là phương án dự phòng có khả năng. Flag -C buộc mã màu ANSI ngay cả khi stdout là pipe (thông thường jq loại bỏ chúng), và -R yêu cầu less render các mã đó thay vì in chúng dưới dạng văn bản chữ. Kết quả là tài liệu có màu đầy đủ và có thể cuộn — không có cấu trúc cây tương tác của jless. Điều hướng bên trong less sử dụng phím mũi tên hoặc vim-style j/k, và / kích hoạt tìm kiếm văn bản tích hợp của 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 buffer toàn bộ output đã định dạng trước khi less có thể hiển thị. Với file 200 MB, điều này có nghĩa là chờ vài giây và tiêu thụ bộ nhớ đáng kể — giới hạn tương tự như jq . thông thường. Với file lớn, hãy dùng jless thay thế vì nó stream tăng dần.JQ_COLORS — Chủ Đề Màu Tùy Chỉnh
JQ_COLORS là biến môi trường ghi đè sơ đồ màu ANSI mặc định của jq. Nó nhận một chuỗi phân tách bằng dấu hai chấm gồm bảy mã thuộc tính ANSI;màu, một cho mỗi loại JSON theo thứ tự cố định này: null : false : true : số : chuỗi : mảng : đối tượng. Mỗi mã theo định dạng thuộc tính;màu trong đó thuộc tính là 0 (bình thường), 1 (đậm), 2 (mờ), hoặc 4 (gạch chân), và màu là số màu ANSI chuẩn (30–37 = chuẩn, 90–97 = sáng).
# 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 phải có chính xác bảy giá trị phân tách bằng dấu hai chấm. Nếu chuỗi có ít phân đoạn hơn, jq im lặng quay về mặc định tích hợp mà không có thông báo lỗi nào — khiến việc chẩn đoán cấu hình sai rất khó. Luôn kiểm tra chuỗi màu mới trên payload JSON ngắn trước khi thêm vào profile shell.Alias Shell cho Xem JSON Hàng Ngày
Các lệnh xem JSON tương tác mặc định khá dài dòng. Một tập hợp alias nhỏ trong ~/.bashrc hoặc ~/.zshrc biến jless và phân trang có màu thành các lệnh một từ tích hợp tự nhiên vào bất kỳ quy trình làm việc nào. Các alias bên dưới có thể kết hợp — jv và jvp đều chấp nhận input được pipe hoặc tên file làm đối số đầu tiên.
# 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 — Xem File JSON với Tô Sáng Cú Pháp
bat là thay thế cho cat với tô sáng cú pháp, số dòng, và pager tích hợp. Với file JSON trên đĩa, nó cung cấp trải nghiệm đọc sạch theo phong cách editor mà không cần mở editor văn bản đầy đủ. Khác với jless, bat render file như văn bản tĩnh — không thu gọn, không tìm kiếm, không điều hướng ngoài cuộn. Điểm mạnh của nó là sự rõ ràng trực quan cho file tĩnh cỡ trung bình (cấu hình, fixture, payload kiểm thử) nơi bạn muốn màu cú pháp và số dòng nhưng không cần điều hướng cây tương tác.
# 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 để đọc file cấu hình tĩnh và fixture kiểm thử nơi số dòng quan trọng (ví dụ khi lỗi kiểm thử tham chiếu dòng 47 của file fixture). Với phản hồi API và JSON động từ curl, jless mở nhanh hơn và thực tế hơn để điều hướng. Nếu cần xem trong trình duyệt và chia sẻ với đồng nghiệp, dán trực tiếp vào công cụ Định dạng JSON đẹp — không cần terminal.fx — Trình Khám Phá JSON Node.js Tương Tác
fx là trình xem JSON tương tác được xây dựng trên Node.js. Giao diện của nó tương tự jless — cây có thể thu gọn, điều hướng bàn phím, tìm kiếm — nhưng thêm hai tính năng mà jless thiếu: hỗ trợ chuột (nhấp để mở rộng/thu gọn node) và khả năng gõ biểu thức JavaScript trong thanh dưới để filter tài liệu theo thời gian thực. Với các team đã chạy Node.js, fx phù hợp tự nhiên và không yêu cầu binary riêng. Với môi trường terminal thuần túy không có Node, jless là lựa chọn gọn nhẹ hơn.
# 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}))'Lỗi Thường Gặp
Bốn lỗi này xuất hiện thường xuyên khi developer bắt đầu sử dụng trình xem JSON terminal lần đầu — mỗi lỗi có cách sửa rõ ràng sau khi bạn hiểu lý do xảy ra.
Vấn đề: jq . xuất toàn bộ output ra stdout cùng lúc. Với phản hồi dài hơn chiều cao terminal, mọi thứ trên phần cuối cùng đều mất — bạn không thể cuộn về đầu hoặc điều hướng đến field cụ thể mà không chạy lại lệnh với filter.
Giải pháp: Pipe sang jless để điều hướng tương tác, hoặc dùng jq -C . | less -R như phương án dự phòng. Cả hai đều giữ toàn bộ tài liệu có thể truy cập bất kể kích thước.
# 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
Vấn đề: JQ_COLORS yêu cầu chính xác bảy giá trị phân tách bằng dấu hai chấm. Nếu chuỗi có sáu hoặc tám giá trị, jq im lặng bỏ qua toàn bộ biến và quay về mặc định đã biên dịch — không có cảnh báo, không có lỗi, chỉ là màu sai.
Giải pháp: Đếm dấu hai chấm: chuỗi JQ_COLORS hợp lệ có đúng sáu dấu hai chấm và bảy giá trị. Echo biến và pipe sang tr để đếm.
# 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
Vấn đề: jless và fx render giao diện tương tác của chúng ra terminal (TTY), không phải stdout. Pipe chúng sang grep, tee, hoặc bất kỳ lệnh nào khác tạo ra mã escape ANSI lộn xộn hoặc output rỗng — output tương tác của trình xem không được thiết kế để các chương trình khác tiêu thụ.
Giải pháp: Dùng jq với filter tường minh để trích xuất dữ liệu theo chương trình. Chỉ dùng jless và fx như bước cuối trong pipeline khi con người đang đọc 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
Vấn đề: -C buộc mã màu ANSI vào luồng output. Khi luồng đó được in trực tiếp ra terminal không ở chế độ raw — hoặc pipe sang công cụ không diễn giải ANSI — các chuỗi escape xuất hiện như ký tự chữ ví dụ ^[[1;34m làm lộn xộn output.
Giải pháp: Luôn ghép jq -C với less -R. Flag -R đặt less vào chế độ raw-input, yêu cầu nó render chuỗi ANSI thành màu sắc thay vì in chúng dưới dạng văn bản.
# -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 — So Sánh Trình Xem Tương Tác
Cả bốn công cụ đều render JSON có màu, nhưng khả năng tương tác của chúng khác nhau đáng kể. Chọn dựa trên việc bạn có cần điều hướng có thể thu gọn, tìm kiếm, hay hỗ trợ chuột — và liệu Node.js đã có trong môi trường của bạn chưa.
Với hầu hết tình huống: cài jless một lần và dùng như trình xem tương tác mặc định. Giữ jq -C . | less -R như phương án dự phòng cho môi trường không thể cài binary bổ sung. Thêm fx nếu team của bạn ưu tiên Node.js và đánh giá cao điều hướng chuột hoặc filter JavaScript trực tiếp.
Câu Hỏi Thường Gặp
Làm thế nào để tìm kiếm một key cụ thể bên trong file JSON trong terminal?
Trong jless, nhấn / để mở prompt tìm kiếm tăng dần, gõ tên key, và nhấn Enter. Dùng n để nhảy về phía trước qua các kết quả và N để nhảy ngược lại. Tìm kiếm phân biệt hoa thường theo mặc định. Trong jq -C | less -R, / kích hoạt tìm kiếm tích hợp của less khớp với văn bản thô bao gồm cả mã màu ANSI — tìm kiếm trong jless đáng tin cậy hơn cho JSON có cấu trúc.
# 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
Làm thế nào để điều hướng cấu trúc JSON lồng nhau sâu bằng phím tắt?
jless phản ánh điều hướng vim: j/k để lên/xuống, h để thu gọn node, l để mở rộng. Nhấn H để thu gọn node hiện tại và tất cả siblings cùng lúc — hữu ích để có cái nhìn tổng quan trước khi đi sâu vào một nhánh cụ thể. L mở rộng mọi thứ đệ quy. Khi đã thu gọn tất cả về cấp cao nhất, chỉ mở rộng đường dẫn bạn quan tâm bằng 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
Làm thế nào để màu đầu ra của jq dễ đọc hơn trên terminal tối?
Đặt biến môi trường JQ_COLORS với mã thuộc tính ANSI;màu cho từng loại JSON. Bảy vị trí theo thứ tự là: null, false, true, số, chuỗi, mảng, đối tượng. Đặt export trong ~/.bashrc hoặc ~/.zshrc để áp dụng cho mọi lần gọi jq. Màu sáng đậm hoạt động tốt nhất trên nền tối.
# 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 .Sự khác biệt giữa jless và jq . khi xem JSON là gì?
jq . xuất toàn bộ output ra stdout cùng một lúc. Với các phản hồi dài hơn chiều cao terminal, mọi thứ trên phần cuối cùng sẽ biến mất — bạn không thể cuộn về đầu hoặc điều hướng đến field cụ thể mà không chạy lại lệnh với filter. jless render toàn bộ tài liệu trong pager liên tục nơi bạn có thể cuộn, tìm kiếm, thu gọn node và điều hướng bằng phím tắt mà không mất ngữ cảnh. Dùng jq . khi muốn xem nhanh payload nhỏ; dùng jless khi cần khám phá.
# 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 screenLàm thế nào để xem JSON từ phản hồi curl một cách tương tác trong terminal?
Pipe curl trực tiếp vào jless. Luôn thêm -s (silent) để ngăn thanh tiến trình của curl xuất hiện trong output. jless sẽ mở trình xem tương tác với toàn bộ phản hồi được render dưới dạng cây có thể thu gọn. Nếu jless chưa được cài đặt, jq -C . | less -R cung cấp pager có màu như một phương án dự phòng.
# 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
Tôi có thể xem nhiều file JSON cạnh nhau trong terminal không?
jless mở một file một lần. Để so sánh cạnh nhau, sử dụng terminal multiplexer: tmux split-window -h mở split dọc, rồi chạy jless trong mỗi panel với file khác nhau. Ngoài ra, sử dụng công cụ JSON Diff trên trình duyệt nếu bạn cần so sánh cấu trúc của hai tài liệu.
# 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)
Công Cụ Liên Quan
Công cụ Định dạng JSON đẹp mang lại chế độ xem có thể thu gọn và có màu giống như jless — trực tiếp trong trình duyệt, không cần cài đặt và không cần 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.