JSON ist die Lingua Franca der modernen IT. REST-APIs sprechen JSON. Konfigurationsdateien sind JSON (oder YAML, was nur JSON mit weniger Anführungszeichen ist). Cloud-CLI-Tools spucken JSON. Docker, Kubernetes, Terraform, AWS, Azure — alle reden JSON. Wer JSON nicht schnell lesen und manipulieren kann, verschwendet Stunden mit Copy-Paste in Online-Formatter.
Dieser Artikel zeigt dir, wie du JSON im Terminal bändigst, welche jq-Befehle du wirklich brauchst und wo der bitcalc JSON Formatter dir das Leben leichter macht.
jq: Der Schweizer Taschenmesser für JSON
jq ist das, was sed für Text ist — nur für strukturierte Daten. Wer jq nicht kennt, schneidet JSON mit grep und awk zurecht. Das funktioniert, bis das erste verschachtelte Array kommt.
# AWS CLI: Alle EC2-Instanzen mit Name und Typ
aws ec2 describe-instances | jq '.Reservations[].Instances[] | {name: .Tags[]? | select(.Key=="Name").Value, type: .InstanceType}'
# Docker: Alle laufenden Container-IDs
docker ps --format json | jq -r '.ID'
# Terraform: Alle Resource-Namen aus dem State
terraform show -json | jq '.values.root_module.resources[].name'
Die fünf jq-Befehle, die du im Schlaf können musst
jq '.'— Formatiert JSON. Der schnellste Weg, einen unformatierten JSON-Klumpen lesbar zu machen. Alternativ: JSON Formatter im Browser.jq '.key'— Extrahiert ein Feld.jq '.name'gibt den Wert vonnamezurück.jq '.[]'— Iteriert über ein Array.jq '.items[]'gibt jedes Element einzeln aus.jq 'select(.foo == "bar")'— Filtert.jq '.[] | select(.status == "running")'.jq -r— Raw output. Ohne-rsind Strings in Anführungszeichen. Mit-rnicht. Entscheidend für Shell-Pipelines.
jq '.' macht — aber im Browser, mit einem Klick. JSON reinpasten, „Formatieren" klicken, fertig. Für schnelle Ad-hoc-Inspektionen ohne Terminal ideal. Und der Validator zeigt dir sofort, wenn irgendwo eine Klammer fehlt.
JSON-Format-Fallen: Die drei Dinge, die immer schiefgehen
1. Trailing Comma
{
"name": "server01",
"ip": "10.0.0.1", ← DIESES KOMMA IST BÖSE
}
JavaScript erlaubt es. JSON nicht. Jeder JSON-Parser wirft einen Fehler. Der JSON Formatter markiert die Stelle sofort rot.
2. Kommentare
JSON hat keine Kommentare. // das geht nicht. Viele Tools (VS Code, Docker Compose) akzeptieren sie trotzdem, weil sie im Hintergrund einen JSON-Like-Parser verwenden. Sobald die Datei durch einen echten JSON-Parser geht (API, Terraform), fliegt sie dir um die Ohren.
3. Single Quotes
JSON verlangt doppelte Anführungszeichen. {'key': 'value'} ist kein gültiges JSON. Der JSON Formatter fängt auch das.
JSON Lines: Das unbekannte Format für Logs
JSON Lines (NDJSON) ist ein JSON-Objekt pro Zeile. Docker-Logs, CloudTrail, Elasticsearch-Bulk-API — alle verwenden es. jq kann das mit jq -c (compact) und jq -s (slurp, alles in ein Array).
# Docker-Logs als JSON Lines filtern
docker logs container 2>&1 | grep '^{' | jq -r 'select(.level == "error") | .message'
# NDJSON in Array umwandeln
cat events.ndjson | jq -s '.'
Praxis: Terraform State lesbar machen
Terraform speichert den State standardmäßig als JSON. terraform show -json gibt ihn formatiert aus — aber oft willst du nur einen Ausschnitt. Hier kommt jq ins Spiel:
# Alle AWS-Instance-IDs aus dem State
terraform show -json | jq '.values.root_module.resources[] | select(.type == "aws_instance") | .values.id'
# Alle Output-Werte
terraform show -json | jq '.values.outputs'
Für schnelle visuelle Inspektion: terraform show -json | jq '.' | head -50 — oder den Output in den JSON Formatter pasten und mit Syntax-Highlighting durchscrollen.