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'
jq Cheat-Sheet: Die 10 wichtigsten jq-Befehle
Die jq-Befehle, die du 90% der Zeit brauchst. Alles andere ist Spezialfall.

Die fünf jq-Befehle, die du im Schlaf können musst

  1. jq '.' — Formatiert JSON. Der schnellste Weg, einen unformatierten JSON-Klumpen lesbar zu machen. Alternativ: JSON Formatter im Browser.
  2. jq '.key' — Extrahiert ein Feld. jq '.name' gibt den Wert von name zurück.
  3. jq '.[]' — Iteriert über ein Array. jq '.items[]' gibt jedes Element einzeln aus.
  4. jq 'select(.foo == "bar")' — Filtert. jq '.[] | select(.status == "running")'.
  5. jq -r — Raw output. Ohne -r sind Strings in Anführungszeichen. Mit -r nicht. Entscheidend für Shell-Pipelines.
Der bitcalc JSON Formatter macht genau das, was 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.