jqist ein Kommandozeilen-Tool zur Arbeit mit JSON-Daten und auf den meisten Linux-Distributionen standardmäßig installiert- Es ist nützlich, um JSON-Daten formatiert auszugeben (Pretty Print) oder mit Filtern zu transformieren
- Es ist so leistungsfähig, dass es zu den fünf CLI-Tools gehört, die Entwickler unbedingt lernen sollten, und vereinfacht viele verschiedene Aufgaben rund um JSON-Daten
Installation von jq und grundlegende Verwendung
-
Installationsmethoden
jqkann über die meisten Paketmanager installiert werden; alternativ lässt sich das Binärpaket direkt herunterladen oder aus dem Quellcode bauen- Nach der Installation kann die Funktion mit dem Befehl
jqüberprüft werden
-
Beispiel für die grundlegende Verwendung
- JSON-Daten formatiert ausgeben:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq
- JSON-Daten formatiert ausgeben:
-
Beispiele für JSON-Filter
- Daten filtern, die einer bestimmten Bedingung entsprechen:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy") | {name, username, email}'
- Daten filtern, die einer bestimmten Bedingung entsprechen:
Zentrale Funktionen von jq
Grundlegende Filter
-
Identity-Filter
- Gibt die Eingabedaten unverändert aus:
echo '{"id":1,"name":"Leanne Graham","website":"hildegard.org"}' | jq '.'
- Gibt die Eingabedaten unverändert aus:
-
Zugriff auf bestimmte Felder
- Ein bestimmtes Feld in einem JSON-Objekt auswählen:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name' - Zugriff auf verschachtelte Felder:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.address.zipcode'
- Ein bestimmtes Feld in einem JSON-Objekt auswählen:
Arbeit mit Arrays
-
Zugriff auf Array-Elemente
- Ein Element mit einem bestimmten Index aus einem JSON-Array auswählen:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[0]'
- Ein Element mit einem bestimmten Index aus einem JSON-Array auswählen:
-
Array-Slicing
- Ein Teilarray für einen bestimmten Bereich extrahieren:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[3:6]'
- Ein Teilarray für einen bestimmten Bereich extrahieren:
-
Iteration über Arrays
- Einen Filter auf jedes Element eines Arrays anwenden:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[] | {name, email}'
- Einen Filter auf jedes Element eines Arrays anwenden:
Neues JSON erzeugen
-
Neues Objekt erzeugen
- Ein neues JSON-Objekt aus ausgewählten Feldern erzeugen:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq \ '{"name": .name, "email": .email, "company": .company.name}'
- Ein neues JSON-Objekt aus ausgewählten Feldern erzeugen:
-
Neues Array erzeugen
- Ein Array aus transformierten Daten erzeugen:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '[.[] | {name: .name, email: .email, company: .company.name}]'
- Ein Array aus transformierten Daten erzeugen:
Erweiterte Funktionen von jq
Verwendung von Funktionen
-
Länge berechnen
- Die Länge einer Zeichenkette berechnen:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name | length'
- Die Länge einer Zeichenkette berechnen:
-
Schlüssel extrahieren
- Die Schlüssel eines Objekts als Array zurückgeben:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq 'keys'
- Die Schlüssel eines Objekts als Array zurückgeben:
-
map-Funktion
- Einen Filter auf jedes Element eines Arrays anwenden:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'map({name: .name, city: .address.city})'
- Einen Filter auf jedes Element eines Arrays anwenden:
Datenauswahl
- Daten auswählen, die einer Bedingung entsprechen
- Daten filtern, die eine bestimmte Bedingung erfüllen:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy")'
- Daten filtern, die eine bestimmte Bedingung erfüllen:
JSON-Transformation und Anwendung
-
Erweiterte JSON-Transformation
- Filter zum Gruppieren von Daten oder Berechnen von Statistiken:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'group_by(.address.city) | map({ city: .[0].address.city, user_count: length, users: [.[] | {name: .name, username: .username}] })'
- Filter zum Gruppieren von Daten oder Berechnen von Statistiken:
-
Große JSON-Datenmengen verarbeiten
- Große Mengen an JSON-Daten effizient verarbeiten:
curl 'https://api.github.com/repos/apache/apisix/contributors?per_page=100' | jq \ 'sort_by(.contributions) | reverse | map({username: .login, contributions}) | .[0:5]'
- Große Mengen an JSON-Daten effizient verarbeiten:
-
Im jq Playground praktisch ausprobieren
3 Kommentare
Danke für die Zusammenfassung! Das sind wirklich super nützliche Infos.
> so leistungsstark, dass es sogar zu den fünf CLI-Tools gehört, die Entwickler unbedingt lernen sollten,
Ich frage mich allerdings auch, welche die übrigen vier CLI-Tools sind; im Artikel werden sie nicht erwähnt, sodass das am Ende wie ein MacGuffin wirkt..
https://navendu.me/posts/jq-interactive-guide/….
Im Original steht
> jq is on every “five command line tools to learn as a developer” video on YouTube.
Diese Formulierung ist also enthalten.
Die übrigen vier sind nicht konkret benannt; offenbar wird es in solchen Empfehlungsvideos für CLI-Tools immer wieder erwähnt, haha.