Bash JSON Viewer — jless & JQ_COLORS Guide
Använd det kostnadsfria JSON Pretty Print direkt i webbläsaren — ingen installation krävs.
Prova JSON Pretty Print online →När du behöver ett bash JSON-visare för interaktiv utforskning snarare än skriptning, räcker det inte med standardröret jq . — utdata rullar förbi toppen av terminalen och du har inget sätt att navigera tillbaka genom ett 300-raders API-svar. Den här guiden täcker verktyg byggda specifikt för interaktiv JSON-visning i terminalen: jless (hopfällbart träd med vim-tangentnavigering), JQ_COLORS för anpassade färgteman, jq -C | less -R för färgad paginering, shell-alias för daglig användning och fx som Node.js-alternativ. För skriptning, CI/CD och valideringsarbetsflöden, se den tillhörande guiden för JSON-formatering i Bash. För en webbläsarbaserad visare utan installation fungerar JSON Pretty Print direkt. Exemplen är testade på Bash 5.x (macOS via Homebrew, Ubuntu 22.04+) och är kompatibla med Bash 3.2+ (macOS systemshell).
- •
jless— den bästa interaktiva JSON-visaren för terminalen: hopfällbart träd, vim-tangenter, inkrementell sökning - •
jq -C . | less -R— färgad rullningsbar pager utan extra installation utöver jq - •
JQ_COLORS— miljövariabel som anpassar jq:s ANSI-färgschema för varje JSON-typ - •
fx— interaktiv Node.js JSON-visare med musstöd och JavaScript-filteruttryck - •
alias jv='jless'— ett ettordskommando gör interaktiv visning till en muskelminnesrutin
Interaktiv vs. Skriptad JSON-visning
Att pipa JSON till jq . är rätt val när du vill ha formaterad utdata för en liten payload, eller när resultatet matas till ett annat kommando. Det är fel val när du behöver utforska ett API-svar med 200 fält — utdata flyger förbi terminalfönstret och lämnar dig utan möjlighet att navigera, fälla ihop sektioner eller söka efter ett specifikt fält utan att köra om kommandot med ett filter. Interaktiva JSON-visare renderar samma formaterade, färgade utdata inuti en beständig pager där du styr navigeringen. Datan är identisk; skillnaden är gränssnittet.
# jq . — utdata rullar bort för stora svar curl -s https://api.github.com/users/torvalds | jq . # 300+ rader rullar förbi — du tappar kontexten omedelbart
# jless — öppnar en interaktiv pager, inget rullar bort curl -s https://api.github.com/users/torvalds | jless # Fullt dokument synligt, hopfällbart, sökbart med j/k/h/l
jq med explicita filter och hantering av exitkoder. Den Bash JSON-formateringsguiden täcker de skriptmönstren.jless — Interaktiv JSON-visare
jless är en ändamålsbyggd terminal-JSON-visare. Till skillnad från ett vanligt jq-rör renderar den dokumentet som ett beständigt hopfällbart träd: varje objekt och array kan expanderas eller fällas ihop oberoende med l och h, navigeringen använder vim-stiltangenter och inkrementell sökning hittar vilken nyckel eller vilket värde som helst omedelbart. Den strömmar indata inkrementellt, så den öppnar stora filer och API-svar på under en sekund oavsett storlek — där jq buffrar hela dokumentet innan det visas. Jag når efter jless som det första verktyget när ett API-svar är för stort för att skanna med en blick.
Installation
# macOS brew install jless # Linux — förbyggd binär från 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/ # Verifiera jless --version
Grundläggande användning
# Öppna en lokal fil — interaktiv trädvisare startar omedelbart jless api-response.json # Pipa valfri JSON-ström direkt till jless curl -s https://api.github.com/users/torvalds | jless # Öppna med alla noder ihopfällda till toppnivå (användbar startpunkt för stora dokument) jless --mode line api-response.json # Ladda ett specifikt array-element och visa det i isolation jq '.[0]' deployments.json | jless
Navigering och sökning i praktiken
# Inuti jless: # # j / ↓ nedåt # k / ↑ uppåt # l / → expandera nod (eller Enter) # h / ← fäll ihop nod # H fäll ihop aktuell + alla syskon → översikt på hög nivå # L expandera allt rekursivt # # / starta sökning framåt — skriv ett nyckelnamn och tryck Enter # n / N nästa / föregående söktreffer # # g / gg hoppa till början # G hoppa till slutet # q avsluta
Snabbreferens för jless-tangenter
Alla genvägar är tillgängliga direkt efter att du öppnat jless — ingen konfiguration krävs. Navigeringsmodellen är avsiktligt identisk med vim så att befintligt muskelminne överförs.
jq -C | less -R — Färgad paginering utan extra verktyg
Om jless inte är installerat och du behöver en rullningsbar, färgad vy av ett JSON-svar, jq -C . | less -R är ett kapabelt reservalternativ. Flaggan -C tvingar ANSI-färgkoder även när stdout är ett rör (normalt tar jq bort dem), och -R säger till less att rendera dessa koder istället för att skriva ut dem som bokstavlig text. Resultatet är ett fullt färgat, rullningsbart dokument — utan jless interaktiva trädstruktur. Navigeringen inuti less använder piltangenter eller vim-stil j/k, och / utlöser less inbyggda textsökning.
# Grundläggande färgad pager jq -C . response.json | less -R # Från ett curl-svar — -s förhindrar att förloppsfältet skadar JSON-strömmen curl -s https://api.github.com/repos/jqlang/jq | jq -C . | less -R # Sortera nycklar för enklare visuell skanning, sedan paginera jq -CS . config.json | less -R # -C = tvinga färg, -S = sortera nycklar (båda flaggorna kombinerade) # Lägg till ett alias så att du slipper skriva hela röret varje gång alias jqv='jq -C . | less -R' # Användning: cat response.json | jqv # eller: curl -s https://api.example.com/status | jqv
jq -C | less -R buffrar hela den formaterade utdatan innan less kan visa den. På en 200 MB-fil innebär detta att vänta flera sekunder och förbruka avsevärt minne — samma begränsning som vanlig jq .. För stora filer, använd jless istället, som strömmar inkrementellt.JQ_COLORS — Anpassade färgteman
JQ_COLORS är en miljövariabel som åsidosätter jq:s standardmässiga ANSI-färgschema. Den tar en kolonseparerad sträng med sju ANSI attribute;color-koder, en per JSON-typ i den här fasta ordningen: null : false : true : tal : strängar : arrayer : objekt. Varje kod har formatet attribut;färgdär attribut är 0 (normalt), 1 (fet), 2 (dämpad) eller 4 (understruken) och färg är ett standard-ANSI-färgnummer (30–37 = standard, 90–97 = ljust).
# ANSI-färgreferens för att bygga JQ_COLORS: # Attribut: 0=normalt 1=fet 2=dämpad 4=understruken # Färger: 30=svart 31=röd 32=grön 33=gul # 34=blå 35=magenta 36=cyan 37=vit # Ljusa: 90=ljust-svart 91=ljust-röd 92=ljust-grön 93=ljust-gul # 94=ljust-blå 95=ljus-magenta 96=ljust-cyan 97=ljust-vit # # Ordning: null : false : true : tal : strängar : arrayer : objekt # Hög-kontrast tema för mörka terminaler (rekommenderas) export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96" # null=dämpad-grå, false=ljust-röd, true=ljust-grön, # numbers=ljust-gul, strings=grön, arrays=fet-cyan, objects=fet-cyan # Solarized-stils tema export JQ_COLORS="2;37:0;35:0;35:0;36:0;33:1;34:1;34" # null=dämpad-vit, false=magenta, true=magenta, # numbers=cyan, strings=gul, arrays=fet-blå, objects=fet-blå # Minimalt (bara feta nycklar, allt annat normalt) export JQ_COLORS="0;90:0;39:0;39:0;39:0;39:1;39:1;39"
# Lägg till ditt valda tema i ~/.bashrc eller ~/.zshrc så att det gäller för varje jq-anrop
echo 'export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"' >> ~/.bashrc
source ~/.bashrc
# Testa temat
echo '{"active":true,"errors":null,"count":42,"tags":["api","v2"],"meta":{"version":"1.0"}}' | jq .JQ_COLORS måste ha exakt sju kolonseparerade värden. Om strängen har färre segment faller jq tyst tillbaka på sina inbyggda standardvärden utan något felmeddelande — vilket gör felkonfigurering svårt att diagnostisera. Testa alltid en ny färgsträng på en kort JSON-payload innan du lägger till den i din shell-profil.Shell-alias för daglig JSON-visning
Kommandona för interaktiv JSON-visning är mångsidigt i sin grundform. En liten uppsättning alias i ~/.bashrc eller ~/.zshrc gör jless och färgad paginering till ettordskommandon som naturligt integreras i vilket arbetsflöde som helst. Aliaserna nedan komponerar — jv och jvp accepterar båda pipade indata eller ett filnamn som första argument.
# Lägg till i ~/.bashrc eller ~/.zshrc
# jv — interaktiv visare (jless om tillgängligt, färgad pager som reserv)
jv() {
if command -v jless &>/dev/null; then
jless "$@"
else
jq -C . "$@" | less -R
fi
}
# jvp — visa med nycklar sorterade alfabetiskt (användbart för att jämföra svar)
alias jvp='jq -CS . | less -R'
# jvc — visa från urklipp (macOS)
alias jvc='pbpaste | jless'
# jvf — visa och filtrera: jvf '.users[0]' response.json
jvf() {
local filter="$1"; shift
jq -C "$filter" "$@" | less -R
}
# Ladda om utan att starta om terminal
source ~/.bashrc# Användningsexempel efter att ha lagt till alias ovan # Visa valfri fil eller pipat svar jv deployment-config.json curl -s https://api.github.com/users/torvalds | jv # Visa sorterat (lätt att skanna alfabetiskt) cat feature-flags.json | jvp # Borra interaktivt in i ett subdokument jvf '.database' infra/app-config.json jvf '.users[] | select(.role == "admin")' users.json
bat — Syntaxmarkerad JSON-filvisning
bat är en ersättning för cat med syntaxmarkering, radnummer och en inbyggd pager. För JSON-filer på disk ger det en ren, redaktörsliknande läsupplevelse utan att öppna en fullständig textredigerare. Till skillnad från jless renderar bat filen som statisk text — ingen ihopfällning, ingen sökning, ingen navigering utöver rullning. Dess styrka är visuell klarhet för mellanstora statiska filer (configs, fixtures, testpayloads) där du vill ha syntaxfärg och radnummer men inte behöver interaktiv trädnavigering.
# macOS brew install bat # Debian / Ubuntu (binären kan heta batcat) apt-get install -y bat # alias bat=batcat # lägg till i ~/.bashrc vid behov på Ubuntu # Visa en JSON-fil med syntaxmarkering och radnummer bat config/feature-flags.json # Inaktivera pager — skriv direkt till terminal (användbart i skript) bat --paging=never api-response.json # Kombinera med jq: formatera med jq, visa med bat (behåller JSON-markering) jq '.' response.json | bat --language=json --paging=never
bat för att läsa statiska konfigurationsfiler och testfixtures där radnummer spelar roll (t.ex. när ett testfel refererar till rad 47 i en fixture-fil). För API-svar och dynamisk JSON från curl är jless snabbare att öppna och mer praktisk att navigera. Om du behöver visa i webbläsaren och dela med en kollega, klistra in direkt i JSON Pretty Print verktyget — ingen terminal behövs.fx — Interaktiv Node.js JSON-utforskare
fx är en interaktiv JSON-visare byggd på Node.js. Dess gränssnitt liknar jless — hopfällbart träd, tangentbordsnavigering, sökning — men lägger till två funktioner som jless saknar: musstöd (klicka för att expandera/fälla ihop noder) och möjligheten att skriva ett JavaScript-uttryck i nedre raden för att filtrera dokumentet i realtid. För team som redan kör Node.js passar fx naturligt och kräver ingen separat binär. För rena terminalmiljöer utan Node är jless det smidigare valet.
# Installera globalt via npm npm install -g fx # Eller kör utan att installera (npx cachar paketet) curl -s https://api.github.com/users/torvalds | npx fx # Grundläggande interaktiv användning fx api-response.json curl -s https://api.github.com/repos/jqlang/jq | fx # I fx: piltangenter navigerar, Enter expanderar/fäller ihop, / söker # Nedre raden accepterar JavaScript-uttryck för live-filtrering: # .name → visa bara "name"-fältet # .repos.slice(0,5) → första 5 repon
# fx fungerar även som icke-interaktiv formatter (som jq . men med JS-syntax)
# Skicka ett JavaScript-uttryck som argument — ingen interaktiv läge
echo '{"users":[{"id":1,"name":"Sarah Chen"},{"id":2,"name":"Marcus Osei"}]}' \
| fx '.users[0].name'
# Sarah Chen
# Kedja med map för array-transformationer
cat deployments.json | fx '.items.map(d => ({id: d.deploy_id, status: d.state}))'Vanliga misstag
Dessa fyra misstag dyker upp upprepade gånger när utvecklare börjar använda terminal-JSON-visare — vart och ett har en tydlig lösning när du förstår varför det händer.
Problem: jq . dumpar all utdata till stdout på en gång. För svar längre än terminalens höjd försvinner allt ovanför det sista skärmfyllda — du kan inte rulla tillbaka till början eller navigera till ett specifikt fält.
Lösning: Pipa till jless för interaktiv navigering, eller använd jq -C . | less -R som reserv. Båda håller hela dokumentet tillgängligt oavsett storlek.
# 300-raders API-svar — de första 280 raderna rullar omedelbart bort curl -s https://api.github.com/users/torvalds | jq . # Bara botten av utdatan är synlig — kan inte navigera tillbaka
# Fullt dokument tillgängligt i jless — ingenting förloras curl -s https://api.github.com/users/torvalds | jless # j/k för att rulla, h/l för att fälla ihop/expandera, / för att söka
Problem: JQ_COLORS kräver exakt sju kolonseparerade värden. Om strängen har sex eller åtta värden ignorerar jq tyst hela variabeln och faller tillbaka på sina inbyggda standardvärden — ingen varning, inget fel, bara fel färger.
Lösning: Räkna kolonerna: en giltig JQ_COLORS-sträng har exakt sex kolon och sju värden. Echo variabeln och pipa till tr för att räkna.
# Bara 6 värden — jq använder tyst standardvärden, ingen indikation på varför
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96"
echo '{"ok":true}' | jq . # färger oförändrade — inget fel visas# Exakt 7 värden — 6 kolon export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96" # Verifiera antalet innan du lägger till i shell-profilen echo "$JQ_COLORS" | tr -cd ':' | wc -c # måste ge 6
Problem: jless och fx renderar sitt interaktiva gränssnitt till terminalen (en TTY), inte till stdout. Att pipa dem till grep, tee eller något annat kommando producerar förvanskat ANSI escape-koder eller tom utdata — vistarens interaktiva utdata är inte designad för att konsumeras av andra program.
Lösning: Använd jq med ett explicit filter för programmatisk dataextraktion. Använd jless och fx bara som det sista steget i en pipeline när en människa läser utdatan.
# jless-utdata är för mänskliga ögon — piping producerar skräp jless response.json | grep "request_id" # Utdata: ANSI escape-koder och markörekvenser, inte ren text
# Använd jq för programmatisk extraktion — rent, komponerbart jq -r '.request_id' response.json | grep "req_" # Använd jless bara som terminalslutpunkt — inget efter det jless response.json
Problem: -C tvingar ANSI-färgkoder in i utdataströmmen. När den strömmen skrivs direkt till en terminal som inte är i raw-läge — eller pipas till ett verktyg som inte tolkar ANSI — visas escape-sekvenserna som bokstavliga tecken som ^[[1;34m som smutsar ner utdatan.
Lösning: Para alltid jq -C med less -R. Flaggan -R sätter less i raw-input-läge, vilket säger åt den att rendera ANSI-sekvenser som färger istället för att skriva ut dem som text.
# -C utan -R: escape-sekvenser skrivs ut som råtext jq -C . response.json | less # Utdata: ^[[1;34m"status"^[[0m: ^[[0;32m"ok"^[[0m ...
# -C med -R: ANSI-koder renderas som riktiga färger jq -C . response.json | less -R # Utdata: färgad JSON, ren och läsbar
jless vs jq vs bat vs fx — Jämförelse av interaktiva visare
Alla fyra verktyg renderar färgad JSON, men deras interaktiva förmågor skiljer sig avsevärt. Välj baserat på om du behöver hopfällbar navigering, sökning eller musstöd — och om Node.js redan finns i din miljö.
För de flesta situationer: installera jless en gång och använd det som standardinteraktiv visare. Behåll jq -C . | less -R som reserv för miljöer där du inte kan installera extra binärer. Lägg till fx om ditt team primärt använder Node.js och värdesätter musnavigering eller live-JavaScript-filtrering.
Vanliga frågor
Hur söker jag efter en specifik nyckel i en JSON-fil i terminalen?
I jless, tryck / för att öppna en inkrementell sökprompt, skriv nyckelnamnet och tryck Enter. Använd n för att hoppa till nästa träff och N för föregående. Sökning är skiftlägeskänslig som standard. I jq -C | less -R utlöser / less inbyggda sökning, som matchar råtext inklusive ANSI-färgkoder — jless-sökning är mer pålitlig för strukturerad JSON.
# Öppna filen i jless, tryck sedan / för att söka jless api-response.json # I jless: skriv / → "request_id" → Enter → n för nästa träff # jq-alternativ: extrahera och skriv ut alla matchande nycklar till stdout jq '.. | objects | with_entries(select(.key == "request_id"))' api-response.json
Hur navigerar jag en djupt kapslad JSON-struktur med tangentbordsgenvägar?
jless speglar vim-navigering: j/k för upp/ned, h för att fälla ihop en nod, l för att expandera. Tryck H för att fälla ihop aktuell nod och alla dess syskon på en gång — användbart för att få en översikt på hög nivå innan du borrar in i en specifik gren. L expanderar allt rekursivt. När du väl har fällt ihop allt till toppnivå, expandera bara den sökväg du bryr dig om med l.
# Öppna svaret i jless curl -s https://api.github.com/repos/jqlang/jq | jless # I jless: # H → fäll ihop alla nycklar på toppnivå # j/k → navigera till önskad nyckel # l → expandera bara den grenen # gg → återgå till root # G → hoppa till sista elementet
Hur gör jag jq:s färgade utdata lättare att läsa på en mörk terminal?
Ange miljövariabeln JQ_COLORS med ANSI attribute;color-koder för varje JSON-typ. De sju positionerna är i ordning: null, false, true, tal, strängar, arrayer, objekt. Lägg till exporten i ~/.bashrc eller ~/.zshrc för att tillämpa den på varje jq-anrop. Fetstil med ljusa färger fungerar bäst på mörka bakgrunder.
# Hög-kontrast tema för mörka terminaler — lägg till i ~/.bashrc eller ~/.zshrc
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"
# null=grå, false=ljust-röd, true=ljust-grön,
# numbers=ljust-gul, strings=grön, arrays/objects=ljust-cyan
# Testa direkt utan att ladda om shell
echo '{"active":true,"errors":0,"tags":["api","v2"]}' | jq .Vad är skillnaden mellan jless och jq . för att visa JSON?
jq . rullar utdata förbi toppen av terminalen och ger dig inget sätt att navigera tillbaka — användbart för små svar, men opraktiskt för allt över 50 rader. jless renderar hela dokumentet i en interaktiv pager där du kan rulla, söka, fälla ihop noder och navigera med tangentbordsgenvägar utan att tappa kontext. Använd jq . när du vill kasta ett snabbt öga på en liten payload; använd jless när du behöver utforska.
# Liten payload — jq . är bra
echo '{"status":"ok","version":"2.4.1"}' | jq .
# Stort eller kapslat svar — jless är bättre
curl -s https://api.github.com/repos/jqlang/jq | jless
# → interaktivt träd, inget rullar bort från skärmenHur ser jag JSON från ett curl-svar interaktivt i terminalen?
Pipa curl direkt till jless. Inkludera alltid -s (silent) för att förhindra att curl:s förloppsfält visas i utdata. jless öppnar den interaktiva visaren med hela svaret renderat som ett hopfällbart träd. Om jless inte är installerat ger jq -C . | less -R en färgad pager som reserv.
# Interaktiv utforskning med jless curl -s https://api.github.com/users/torvalds | jless # Färgad pager som reserv (ingen hopfällning, men fortfarande rullningsbar med färg) curl -s https://api.github.com/users/torvalds | jq -C . | less -R
Kan jag visa flera JSON-filer sida vid sida i terminalen?
jless öppnar en fil åt gången. För sida-vid-sida-jämförelse använder du en terminalmultiplexer: tmux split-window -h öppnar en vertikal delning, kör sedan jless i varje ruta med en annan fil. Alternativt, använd det webbläsarbaserade JSON Diff-verktyget om du behöver jämföra två dokument strukturellt.
# tmux sida vid sida: dela horisontellt, kör sedan jless i varje ruta tmux split-window -h # Vänster ruta: jless response-v1.json # Höger ruta: jless response-v2.json # Eller använd diff på jq-normaliserade utdata för en textdiff diff <(jq -S . response-v1.json) <(jq -S . response-v2.json)
Relaterade verktyg
Verktyget JSON Pretty Print ger dig samma hopfällbara, färgade vy som jless — direkt i webbläsaren, utan installation och utan 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.