Bash JSON Viewer β jless & JQ_COLORS
Gebruik de gratis JSON Pretty Print direct in je browser β geen installatie nodig.
JSON Pretty Print online uitproberen βWanneer je een bash JSON-viewer nodig hebt voor interactieve verkenning in plaats van scripting, schiet de standaard jq . pipe tekort β de uitvoer scrollt voorbij de bovenkant van de terminal en je kunt niet terug navigeren door een API-response van 300 regels. Deze gids behandelt tools die speciaal zijn gebouwd voor interactief JSON bekijken in de terminal: jless (inklapbare boom met vim-navigatie), JQ_COLORSvoor aangepaste kleurthema's, jq -C | less -R voor gekleurd pagineren, shell-aliassen voor dagelijks gebruik en fx als Node.js-alternatief. Voor scripting, CI/CD en validatieworkflows zie de bijbehorende gids voor JSON formatteren in Bash. Voor een browser-viewer zonder installatie werkt de JSON Pretty Print tool direct. Voorbeelden zijn getest op Bash 5.x (macOS via Homebrew, Ubuntu 22.04+) en zijn compatibel met Bash 3.2+ (macOS systeemshell).
- β’
jlessβ de beste interactieve JSON-viewer voor de terminal: inklapbare boom, vim-toetsen, incrementeel zoeken - β’
jq -C . | less -Rβ gekleurde scrollbare pager zonder extra installatie bovenop jq - β’
JQ_COLORSβ omgevingsvariabele die het ANSI-kleurschema van jq aanpast voor elk JSON-type - β’
fxβ interactieve Node.js JSON-viewer met muisondersteuning en JavaScript-filterexpressies - β’
alias jv='jless'β een éénwoordig commando maakt interactief bekijken een spiergeheugen-gewoonte
Interactief vs. Gescript JSON bekijken
JSON naar jq . pipen is de juiste keuze wanneer je geformatteerde uitvoer wilt voor een kleine payload, of wanneer het resultaat naar een ander commando gaat. Het is de verkeerde keuze wanneer je een API-response van 200 velden moet verkennen β de uitvoer vliegt voorbij het terminalvenster en laat je geen manier om te navigeren, secties in te klappen of naar een specifiek veld te zoeken zonder het commando opnieuw uit te voeren met een filter. Interactieve JSON-viewers renderen dezelfde geformatteerde, gekleurde uitvoer binnen een persistente pager waar jij de navigatie beheert. De data is identiek; het verschil zit in de interface.
# jq . β uitvoer scrollt buiten beeld bij grote responses curl -s https://api.github.com/users/torvalds | jq . # 300+ regels scrollen voorbij β je verliest direct de context
# jless β opent een interactieve pager, niets scrollt weg curl -s https://api.github.com/users/torvalds | jless # Volledig document zichtbaar, inklapbaar, doorzoekbaar met j/k/h/l
jq met expliciete filters en afhandeling van exitcodes. De gids voor JSON formatteren in Bash behandelt die scriptpatronen.jless β Interactieve JSON-viewer
jless is een doelgebouwde terminal JSON-viewer. In tegenstelling tot een gewone jq-pipe rendert het het document als een persistente inklapbare boom: elk object en elke array kan onafhankelijk worden uitgevouwen of ingeklapt met l en h, navigatie gebruikt vim-stijl toetsen en incrementeel zoeken vindt elke sleutel of waarde direct. Het streamt invoer incrementeel, dus het opent grote bestanden en API-responses in minder dan een seconde ongeacht de grootte β waar jq het hele document buffert voor weergave. Ik grijp als eerste naar jless wanneer een API-response te groot is om in één oogopslag te scannen.
Installatie
# macOS brew install jless # Linux β voorgebouwd binair bestand van 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/ # Verifieer jless --version
Basisgebruik
# Open een lokaal bestand β interactieve boomviewer start direct jless api-response.json # Pipe elke JSON-stream direct naar jless curl -s https://api.github.com/users/torvalds | jless # Open met alle nodes ingeklapt naar het hoogste niveau (handig startpunt voor grote documenten) jless --mode line api-response.json # Laad een specifiek array-element en bekijk het afzonderlijk jq '.[0]' deployments.json | jless
Navigatie en zoeken in de praktijk
# Binnen jless: # # j / β omlaag # k / β omhoog # l / β node uitklappen (of Enter) # h / β node inklappen # H huidige + alle siblings inklappen β overzicht op hoog niveau # L alles recursief uitklappen # # / vooruit zoeken starten β typ een sleutelnaam en druk Enter # n / N volgende / vorige zoektreffer # # g / gg spring naar begin # G spring naar einde # q afsluiten
Overzicht sneltoetsen jless
Alle sneltoetsen zijn direct beschikbaar na het openen van jless β geen configuratie nodig. Het navigatiemodel is opzettelijk identiek aan vim zodat bestaand spiergeheugen overdraagt.
jq -C | less -R β Gekleurd pagineren zonder extra tools
Als jless niet geΓ―nstalleerd is en je een scrollbare, gekleurde weergave van een JSON-response nodig hebt, is jq -C . | less -R een goede terugvaloptie. De vlag -C forceert ANSI-kleurcodes zelfs wanneer stdout een pipe is (normaal verwijdert jq ze) en -R vertelt less die codes te renderen in plaats van ze als letterlijke tekst af te drukken. Het resultaat is een volledig gekleurd, scrollbaar document β zonder de interactieve boomstructuur van jless. Navigatie binnen less gebruikt pijltoetsen of vim-stijl j/k, en / activeert de ingebouwde tekstzoekfunctie van less.
# Basis gekleurde pager jq -C . response.json | less -R # Vanuit een curl-response β -s voorkomt dat voortgangsbalk de JSON-stream beschadigt curl -s https://api.github.com/repos/jqlang/jq | jq -C . | less -R # Sorteer sleutels voor gemakkelijker visueel scannen, dan pagineer jq -CS . config.json | less -R # -C = forceer kleur, -S = sorteer sleutels (beide vlaggen gecombineerd) # Voeg een alias toe zodat je de volledige pipe niet steeds hoeft in te typen alias jqv='jq -C . | less -R' # Gebruik: cat response.json | jqv # of: curl -s https://api.example.com/status | jqv
jq -C | less -R buffert de volledige geformatteerde uitvoer voordat less iets kan weergeven. Op een bestand van 200 MB betekent dit wachten op meerdere seconden en aanzienlijk geheugenverbruik β dezelfde beperking als gewone jq .. Gebruik voor grote bestanden jless, dat incrementeel streamt.JQ_COLORS β Aangepaste kleurthema's
JQ_COLORS is een omgevingsvariabele die het standaard ANSI-kleurschema van jq overschrijft. Het accepteert een door dubbele punten gescheiden string van zeven ANSI attribute;color codes, één per JSON-type in deze vaste volgorde: null : false : true : getallen : strings : arrays : objecten. Elke code heeft het formaat attribuut;kleurwaarbij attribuut 0 (normaal), 1 (vet), 2 (dim) of 4 (onderstreept) is en kleur een standaard ANSI-kleurnummer (30β37 = standaard, 90β97 = helder).
# ANSI-kleurreferentie voor het bouwen van JQ_COLORS: # Attributen: 0=normaal 1=vet 2=dim 4=onderstreept # Kleuren: 30=zwart 31=rood 32=groen 33=geel # 34=blauw 35=magenta 36=cyaan 37=wit # Helder: 90=helder-zwart 91=helder-rood 92=helder-groen 93=helder-geel # 94=helder-blauw 95=helder-magenta 96=helder-cyaan 97=helder-wit # # Volgorde: null : false : true : getallen : strings : arrays : objecten # Hoog-contrast thema voor donkere terminals (aanbevolen) export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96" # null=dim-grijs, false=helder-rood, true=helder-groen, # numbers=helder-geel, strings=groen, arrays=vet-cyaan, objects=vet-cyaan # Solarized-stijl thema export JQ_COLORS="2;37:0;35:0;35:0;36:0;33:1;34:1;34" # null=dim-wit, false=magenta, true=magenta, # numbers=cyaan, strings=geel, arrays=vet-blauw, objects=vet-blauw # Minimaal (alleen vetgedrukte sleutels, de rest normaal) export JQ_COLORS="0;90:0;39:0;39:0;39:0;39:1;39:1;39"
# Voeg je gekozen thema toe aan ~/.bashrc of ~/.zshrc zodat het op elk jq-aanroep wordt toegepast
echo 'export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"' >> ~/.bashrc
source ~/.bashrc
# Test het thema
echo '{"active":true,"errors":null,"count":42,"tags":["api","v2"],"meta":{"version":"1.0"}}' | jq .JQ_COLORS moet exact zeven door dubbele punten gescheiden waarden hebben. Als de string minder segmenten heeft, valt jq stilzwijgend terug op de ingebouwde standaardwaarden zonder enige foutmelding β waardoor een verkeerde configuratie moeilijk te diagnosticeren is. Test altijd een nieuwe kleurstring op een korte JSON-payload voordat je die toevoegt aan je shell-profiel.Shell-aliassen voor dagelijks JSON bekijken
De commando's voor interactief JSON bekijken zijn standaard omslachtig. Een kleine set aliassen in ~/.bashrc of ~/.zshrcmaakt jless en gekleurd pagineren tot éénwoordige commando's die van nature passen in elke workflow. De onderstaande aliassen componeren β jv en jvp accepteren beide gepipede invoer of een bestandsnaam als eerste argument.
# Voeg toe aan ~/.bashrc of ~/.zshrc
# jv β interactieve viewer (jless indien beschikbaar, gekleurde pager als terugval)
jv() {
if command -v jless &>/dev/null; then
jless "$@"
else
jq -C . "$@" | less -R
fi
}
# jvp β bekijk met sleutels alfabetisch gesorteerd (handig voor vergelijking van responses)
alias jvp='jq -CS . | less -R'
# jvc β bekijk vanuit klembord (macOS)
alias jvc='pbpaste | jless'
# jvf β bekijk en filter: jvf '.users[0]' response.json
jvf() {
local filter="$1"; shift
jq -C "$filter" "$@" | less -R
}
# Herladen zonder terminal opnieuw te starten
source ~/.bashrc# Gebruiksvoorbeelden na het toevoegen van bovenstaande aliassen # Bekijk elk bestand of gepipede response jv deployment-config.json curl -s https://api.github.com/users/torvalds | jv # Bekijk gesorteerd (gemakkelijk alfabetisch te scannen) cat feature-flags.json | jvp # Duik interactief in een subdocument jvf '.database' infra/app-config.json jvf '.users[] | select(.role == "admin")' users.json
bat β JSON-bestanden bekijken met syntaxismarkering
bat is een vervanging voor cat met syntaxismarkering, regelnummers en een ingebouwde pager. Voor JSON-bestanden op schijf biedt het een overzichtelijke, redacteurachtige leeservaring zonder een volledige teksteditor te openen. In tegenstelling tot jless rendert bat het bestand als statische tekst β geen inklappen, geen zoeken, geen navigatie buiten scrollen. Zijn kracht is visuele duidelijkheid voor middelgrote statische bestanden (configs, fixtures, testpayloads) waar je syntaxismarkering en regelnummers wilt maar geen interactieve boomnavigatie nodig hebt.
# macOS brew install bat # Debian / Ubuntu (binary kan batcat heten) apt-get install -y bat # alias bat=batcat # voeg toe aan ~/.bashrc indien nodig op Ubuntu # Bekijk een JSON-bestand met syntaxismarkering en regelnummers bat config/feature-flags.json # Pager uitschakelen β direct naar terminal afdrukken (handig in scripts) bat --paging=never api-response.json # Combineer met jq: formatteren met jq, bekijken met bat (behoudt JSON-markering) jq '.' response.json | bat --language=json --paging=never
bat voor het lezen van statische configuratiebestanden en testfixtures waar regelnummers belangrijk zijn (bijv. wanneer een testfout verwijst naar regel 47 van een fixture-bestand). Voor API-responses en dynamisch JSON van curl is jless sneller te openen en praktischer te navigeren. Als je in de browser wilt bekijken en delen met een collega, plak direct in de JSON Pretty Print tool β geen terminal nodig.fx β Interactieve Node.js JSON-verkenner
fx is een interactieve JSON-viewer gebouwd op Node.js. De interface is vergelijkbaar met jless β inklapbare boom, toetsenbordnavigatie, zoeken β maar voegt twee functies toe die jless mist: muisondersteuning (klik om nodes uit/in te klappen) en de mogelijkheid om een JavaScript-expressie in de onderste balk te typen om het document in realtime te filteren. Voor teams die al Node.js gebruiken is fx een natuurlijke keuze en vereist geen apart binair bestand. Voor pure terminalomgevingen zonder Node is jless de lichtere keuze.
# Globaal installeren via npm npm install -g fx # Of uitvoeren zonder installeren (npx cachet het pakket) curl -s https://api.github.com/users/torvalds | npx fx # Basis interactief gebruik fx api-response.json curl -s https://api.github.com/repos/jqlang/jq | fx # In fx: pijltoetsen navigeren, Enter klapt uit/in, / zoekt # Onderste balk accepteert JavaScript-expressies voor live filteren: # .name β toon alleen het "name"-veld # .repos.slice(0,5) β eerste 5 repos
# fx werkt ook als niet-interactieve formatter (zoals jq . maar met JS-syntaxis)
# Geef een JavaScript-expressie als argument β geen interactieve modus
echo '{"users":[{"id":1,"name":"Sarah Chen"},{"id":2,"name":"Marcus Osei"}]}' \
| fx '.users[0].name'
# Sarah Chen
# Ketting met map voor array-transformaties
cat deployments.json | fx '.items.map(d => ({id: d.deploy_id, status: d.state}))'Veelgemaakte fouten
Deze vier fouten komen steeds opnieuw voor wanneer ontwikkelaars terminal JSON-viewers beginnen te gebruiken β elke heeft een duidelijke oplossing zodra je begrijpt waarom het gebeurt.
Probleem: jq . dumpt alle uitvoer in één keer naar stdout. Voor responses langer dan de terminalhoogte verdwijnt alles boven het laatste scherm β je kunt niet terug scrollen naar het begin of naar een specifiek veld navigeren.
Oplossing: Pipe naar jless voor interactieve navigatie, of gebruik jq -C . | less -R als terugval. Beide houden het volledige document toegankelijk ongeacht de grootte.
# 300-regels API-response β bovenste 280 regels scrollen direct weg curl -s https://api.github.com/users/torvalds | jq . # Alleen het onderste deel van de uitvoer is zichtbaar β kan niet terug
# Volledig document toegankelijk in jless β niets gaat verloren curl -s https://api.github.com/users/torvalds | jless # j/k om te scrollen, h/l om in/uit te klappen, / om te zoeken
Probleem: JQ_COLORS vereist exact zeven door dubbele punten gescheiden waarden. Als de string zes of acht waarden heeft, negeert jq de hele variabele stilzwijgend en valt terug op de ingebouwde standaardwaarden β geen waarschuwing, geen fout, alleen de verkeerde kleuren.
Oplossing: Tel de dubbele punten: een geldige JQ_COLORS-string heeft exact zes dubbele punten en zeven waarden. Echo de variabele en pipe naar tr om te tellen.
# Slechts 6 waarden β jq gebruikt stilzwijgend standaarden, geen indicatie waarom
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96"
echo '{"ok":true}' | jq . # kleuren ongewijzigd β geen fout getoond# Exact 7 waarden β 6 dubbele punten export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96" # Verifieer het aantal voordat je het toevoegt aan het shell-profiel echo "$JQ_COLORS" | tr -cd ':' | wc -c # moet 6 weergeven
Probleem: jless en fx renderen hun interactieve interface naar de terminal (een TTY), niet naar stdout. Ze pipen naar grep, tee of elk ander commando produceert verminkte ANSI escape-codes of lege uitvoer β de interactieve uitvoer van de viewer is niet ontworpen om door andere programma's te worden verwerkt.
Oplossing: Gebruik jq met een expliciete filter voor programmatische data-extractie. Gebruik jless en fx alleen als de laatste stap in een pipeline wanneer een mens de uitvoer leest.
# jless-uitvoer is voor menselijke ogen β pipen produceert rommel jless response.json | grep "request_id" # Uitvoer: ANSI escape-codes en cursor-sequences, geen schone tekst
# Gebruik jq voor programmatische extractie β schoon, composeerbaar jq -r '.request_id' response.json | grep "req_" # Gebruik jless alleen als eindpunt in de terminal β niets daarna jless response.json
Probleem: -C forceert ANSI-kleurcodes in de uitvoerstroom. Wanneer die stroom direct naar een terminal wordt afgedrukt die niet in raw-modus is β of naar een tool die ANSI niet interpreteert β verschijnen de escape-sequences als letterlijke tekens zoals ^[[1;34m die de uitvoer verpesten.
Oplossing: Combineer jq -C altijd met less -R. De -R vlag zet less in raw-input modus, waardoor het ANSI-sequences rendert als kleuren in plaats van ze als tekst af te drukken.
# -C zonder -R: escape-sequences worden als ruwe tekst afgedrukt jq -C . response.json | less # Uitvoer: ^[[1;34m"status"^[[0m: ^[[0;32m"ok"^[[0m ...
# -C met -R: ANSI-codes worden als echte kleuren gerenderd jq -C . response.json | less -R # Uitvoer: gekleurd JSON, schoon en leesbaar
jless vs jq vs bat vs fx β Vergelijking interactieve viewers
Alle vier tools renderen gekleurd JSON, maar hun interactieve mogelijkheden verschillen aanzienlijk. Kies op basis van of je inklapbare navigatie, zoeken of muisondersteuning nodig hebt β en of Node.js al in je omgeving aanwezig is.
Voor de meeste situaties: installeer jless één keer en gebruik het als standaard interactieve viewer. Houd jq -C . | less -R als terugval voor omgevingen waar je geen extra binaries kunt installeren. Voeg fx toe als je team primair Node.js gebruikt en muisnavigatie of live JavaScript-filtering waardeert.
Veelgestelde vragen
Hoe zoek ik naar een specifieke sleutel in een JSON-bestand in de terminal?
Druk in jless op / om een incrementele zoekprompt te openen, typ de sleutelnaam en druk op Enter. Gebruik n om naar de volgende treffer te springen en N voor de vorige. Zoeken is standaard hoofdlettergevoelig. In jq -C | less -R activeert / de ingebouwde zoekfunctie van less, die overeenkomt met ruwe tekst inclusief ANSI-kleurcodes β het zoeken in jless is betrouwbaarder voor gestructureerd JSON.
# Open bestand in jless, druk daarna op / om te zoeken jless api-response.json # In jless: typ / β "request_id" β Enter β n voor volgende treffer # jq-alternatief: extraheer en druk alle overeenkomende sleutels af jq '.. | objects | with_entries(select(.key == "request_id"))' api-response.json
Hoe navigeer ik door een diep geneste JSON-structuur met sneltoetsen?
jless volgt vim-navigatie: j/k voor omhoog/omlaag, h om een node in te klappen, l om te expanderen. Druk H om de huidige node en alle siblings tegelijk in te klappen β handig voor een overzicht op hoog niveau voordat je in een specifieke tak duikt. L klapt alles recursief uit. Nadat je alles hebt ingeklapt naar het hoogste niveau, klap je alleen het pad dat je wilt uit met l.
# Open de response in jless curl -s https://api.github.com/repos/jqlang/jq | jless # In jless: # H β klap alle sleutels op het hoogste niveau in # j/k β navigeer naar de gewenste sleutel # l β klap alleen die tak uit # gg β terug naar root # G β spring naar laatste element
Hoe maak ik de kleuruitvoer van jq beter leesbaar op een donker terminal?
Stel de omgevingsvariabele JQ_COLORS in met ANSI attribute;color codes voor elk JSON-type. De zeven posities zijn in volgorde: null, false, true, getallen, strings, arrays, objecten. Zet de export in ~/.bashrc of ~/.zshrc om het op elk jq-aanroep toe te passen. Vetgedrukte heldere kleuren werken het best op donkere achtergronden.
# Hoog-contrast thema voor donkere terminals β voeg toe aan ~/.bashrc of ~/.zshrc
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"
# null=grijs, false=helderblauw, true=heldergroen,
# numbers=heldergeel, strings=groen, arrays/objects=heldercyaan
# Test direct zonder shell te herladen
echo '{"active":true,"errors":0,"tags":["api","v2"]}' | jq .Wat is het verschil tussen jless en jq . voor het bekijken van JSON?
jq . scrolt de uitvoer voorbij de bovenkant van de terminal en geeft geen manier om terug te navigeren β handig voor kleine responses, maar onpraktisch voor alles boven de 50 regels. jless rendert het volledige document in een interactieve pager waar je kunt scrollen, zoeken, nodes inklappen en navigeren met sneltoetsen zonder context te verliezen. Gebruik jq . voor een snel blik op kleine payloads; gebruik jless wanneer je wilt verkennen.
# Kleine payload β jq . is prima
echo '{"status":"ok","version":"2.4.1"}' | jq .
# Grote of geneste response β jless is beter
curl -s https://api.github.com/repos/jqlang/jq | jless
# β interactieve boom, niets scrollt buiten beeldHoe bekijk ik JSON van een curl-response interactief in de terminal?
Pipe curl direct naar jless. Gebruik altijd -s (silent) om te voorkomen dat de voortgangsbalk van curl in de uitvoer verschijnt. jless opent de interactieve viewer met de volledige response als inklapbare boom. Als jless niet geΓ―nstalleerd is, geeft jq -C . | less -R een gekleurde pager als terugvaloptie.
# Interactieve verkenning met jless curl -s https://api.github.com/users/torvalds | jless # Gekleurde pager als terugval (geen inklappen, maar wel scrollbaar met kleur) curl -s https://api.github.com/users/torvalds | jq -C . | less -R
Kan ik meerdere JSON-bestanden naast elkaar bekijken in de terminal?
jless opent één bestand tegelijk. Voor vergelijking naast elkaar gebruik je een terminal-multiplexer: tmux split-window -h opent een verticale splitsing, voer dan jless uit in elk venster met een ander bestand. Als alternatief gebruik je de browser-gebaseerde JSON Diff-tool voor structurele vergelijking van twee documenten.
# tmux naast elkaar: horizontaal splitsen, dan jless in elk venster tmux split-window -h # Linkervenster: jless response-v1.json # Rechtervenster: jless response-v2.json # Of diff op jq-genormaliseerde uitvoer voor tekstuele vergelijking diff <(jq -S . response-v1.json) <(jq -S . response-v2.json)
Gerelateerde tools
De JSON Pretty Print tool geeft je dezelfde inklapbare, gekleurde weergave als jless β direct in de browser, zonder installatie en zonder 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.