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-reignen sich die Ausgaben direkt fürwhile 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.