jq ist ein schlankes Kommandozeilen-Werkzeug zum Filtern, Transformieren und Formatieren von JSON-Daten. Entwickelt von Stephen Dolan (erste Veröffentlichung 2012), wird jq oft als „sed für JSON“ bezeichnet: Es liest JSON von der Standardeingabe oder aus Dateien, wendet einen Filterausdruck an und schreibt das Ergebnis als JSON auf die Standardausgabe.

Grundlagen

jq '.' datei.json                # JSON hübsch formatiert ausgeben
echo '{"name":"Ada"}' | jq '.name'   # Feld extrahieren
jq -r '.name' datei.json         # -r: Roh-String ohne Anfuehrungszeichen
jq -c '.' datei.json             # -c: kompakte Einzeilen-Ausgabe

Der Punkt . steht für das aktuelle Objekt. Mit .feld greift man auf ein Feld zu, mit .[] iteriert man über ein Array. Die Pipe | im Filter (nicht die Shell-Pipe) verkettet Ausdrücke.

Häufige Filter

jq '.users[] | select(.age > 30)' datei.json   # filtern
jq '.users | map(.name)' datei.json             # Feld je Element
jq 'length' datei.json                          # Anzahl / Länge
jq 'keys' datei.json                            # Objekt-Schlüssel
jq 'sort_by(.preis) | reverse' datei.json       # sortieren
jq '.items[0:3]' datei.json                     # Slice
jq -s '.' *.json                                # -s: alle Eingaben als Array

Mit select() und map() lassen sich typische API-Antworten direkt in der Pipeline aufbereiten, zum Beispiel curl -s https://api.example.com/items | jq '.items[].name'.

Praxis-Tipps

  • Filter immer in einfache Anführungszeichen setzen, damit die Shell keine Zeichen frisst.
  • jq '.[] | .name' liefert mehrere Werte als Stream; mit -r eignen sich die Ausgaben direkt für while read-Schleifen.
  • Das Format JSON selbst ist im Glossar unter JSON erklärt, weitere Datenformate unter YAML, TOML und JSON.

Verwandte Werkzeuge: Für YAML-Konfigurationen übernimmt yq die gleiche Rolle, in Shell-Pipelines ergänzen Bash-Befehle und curl/wget die Arbeit. Wer Daten deklarativ abfragen will, findet in Datalog das logikbasierte Gegenstück zu den JSON-Filtern.