In diesem Artikel
Was ist JSONPath?
JSONPath ist eine Abfragesprache zum Extrahieren von Daten aus JSON-Dokumenten. So wie XPath durch XML-Dokumente navigiert, navigiert JSONPath mit einer kompakten Ausdruckssyntax durch JSON-Strukturen. Nach Jahren informeller Spezifikation wurde die Sprache im RFC 9535 (Februar 2024) formalisiert.
JSONPath-Ausdrücke beginnen mit $ (dem Wurzelelement) und durchlaufen das Dokument über Punkt- oder Klammernotation. Die Sprache unterstützt Platzhalter, rekursiven Abstieg, Array-Slicing und Filterausdrücke – damit lassen sich tief verschachtelte Werte mit einem einzigen Ausdruck extrahieren.
JSONPath-Syntax
JSONPath bietet mehrere Operatoren, um JSON-Strukturen zu durchlaufen und zu filtern.
- Wurzel ($) – jeder JSONPath-Ausdruck beginnt mit $, das für das Wurzelobjekt oder -Array des JSON-Dokuments steht
- Punktnotation ($.store.book) – Zugriff auf Kindeigenschaften über den Namen, ähnlich dem Zugriff auf JavaScript-Objekte. Punkte trennen jede Verschachtelungsebene.
- Klammernotation ($['store']['book']) – alternative Syntax mit in Anführungszeichen gesetzten Eigenschaftsnamen in Klammern. Erforderlich, wenn Eigenschaftsnamen Sonderzeichen oder Leerzeichen enthalten.
- Platzhalter (*) – trifft auf alle Elemente der aktuellen Ebene zu. $.store.* liefert alle direkten Kinder von store; $[*] liefert alle Elemente eines Wurzel-Arrays.
- Rekursiver Abstieg (..) – durchsucht alle Nachfahren in beliebiger Tiefe. $..price findet jedes Feld 'price' an beliebiger Stelle im Dokument, unabhängig von der Verschachtelungsebene.
- Array-Slices ([start:end:step]) – wählt einen Bereich von Array-Elementen aus. $[0:3] liefert die ersten drei Elemente; $[-2:] die letzten beiden; $[::2] jedes zweite Element.
JSONPath-Ausdrucksbeispiele
Hier finden Sie praktische Beispiele, die zeigen, wie JSONPath-Ausdrücke Daten aus realen JSON-Strukturen extrahieren.
- Verschachtelte Werte extrahieren – $.users[0].name liefert den Namen des ersten Benutzers. $.config.database.host holt einen tief verschachtelten Konfigurationswert.
- Arrays filtern – $.users[?(@.age > 18)] liefert alle Benutzer über 18 Jahre. $.products[?(@.price < 50)] findet günstige Produkte. Filter verwenden @, um auf das aktuelle Element zu verweisen.
- Mehrstufige Abfragen – $..author liefert jedes author-Feld in beliebiger Tiefe. $.store.book[*].title liefert alle Buchtitel. $.orders[*].items[*].sku extrahiert SKUs über alle Bestellungen und Artikel hinweg.
Diese Ausdrücke lassen sich kombinieren, um leistungsstarke Abfragen zu erstellen. Zum Beispiel liefert $.store.book[?(@.price < 10)].title die Titel aller Bücher, die günstiger als 10 sind.
Kostenlos testen – keine Registrierung erforderlich
JSONPath-Ausdrücke testen →Häufige Anwendungsfälle
JSONPath kommt überall dort zum Einsatz, wo strukturierte Daten aus JSON-Dokumenten abgefragt oder extrahiert werden müssen.
- Extraktion aus API-Antworten – bestimmte Felder aus komplexen API-Antworten herausziehen, ohne eigenen Parsing-Code zu schreiben. Testen Sie Ausdrücke an Beispielantworten, bevor Sie sie einsetzen.
- Konfiguration parsen – Werte aus JSON-Konfigurationsdateien in CI/CD-Pipelines, Deployment-Skripten und Infrastructure-as-Code-Tools extrahieren
- Log-Analyse – strukturierte JSON-Logs abfragen, um bestimmte Ereignisse, Fehlermuster oder Performance-Kennzahlen in großen Log-Dateien zu finden
- Datentransformation – JSONPath in ETL-Pipelines nutzen, um JSON-Daten beim Import/Export auszuwählen, zu filtern und umzuformen
JSONPath vs. JQ vs. JMESPath
Mehrere Abfragesprachen richten sich an JSON-Dokumente. Jede hat eigene Stärken und eine eigene Ökosystem-Unterstützung.
- JSONPath – standardisierte Abfragesyntax (RFC 9535), in Programmierbibliotheken weit verbreitet (Java, Python, JavaScript, PHP). Ideal für einfache Extraktion und Filterung. Keine integrierte Transformation.
- JQ – Kommandozeilen-Prozessor für JSON mit einer mächtigen funktionalen Sprache. Unterstützt Transformation, Berechnung und Ausgabeformatierung. Ideal für Shell-Skripting und Datenverarbeitung auf der Kommandozeile.
- JMESPath – Abfragesprache, die von der AWS CLI und Boto3 verwendet wird. Strengere Syntax als JSONPath mit integrierten Funktionen. Ideal für die Integration ins AWS-Ökosystem und programmatische Abfragen.
Häufig gestellte Fragen
Verwendet JSONPath nullbasierte oder einsbasierte Array-Indizierung?
JSONPath verwendet nullbasierte Array-Indizierung, im Einklang mit den meisten Programmiersprachen. $[0] liefert das erste Element, $[1] das zweite und so weiter. Negative Indizes zählen vom Ende her: $[-1] liefert das letzte Element, $[-2] das vorletzte.
Wie funktionieren Filterausdrücke in JSONPath?
Filterausdrücke verwenden die Syntax [?(expression)], wobei @ auf das gerade ausgewertete Element verweist. Sie können Vergleichsoperatoren (==, !=, <, >, <=, >=), logische Operatoren (&& und ||) sowie Eigenschaftszugriff (z. B. @.name) verwenden. Beispiel: $[?(@.status == 'active')] liefert Elemente, bei denen status gleich 'active' ist.
Sind alle JSONPath-Implementierungen kompatibel?
Nicht vollständig. Vor RFC 9535 (2024) gab es für JSONPath keinen formalen Standard, und die Implementierungen unterschieden sich. Häufige Unterschiede betreffen die Syntax von Filterausdrücken, das Verhalten des rekursiven Abstiegs und den Umgang mit fehlenden Eigenschaften. RFC 9535 soll das Verhalten vereinheitlichen, ältere Bibliotheken folgen jedoch möglicherweise weiterhin anderen Konventionen. Testen Sie Ausdrücke immer mit Ihrer konkreten Implementierung.