JSONPath ist eine Abfragesprache, die Werte aus einem JSON-Dokument anhand eines Pfads herausholt — dieselbe Aufgabe, die XPath für XML übernimmt. Wer mit deutschen Behörden- oder Bankensystemen gearbeitet hat, die ihre Integrationen historisch auf XML/SOAP aufgebaut haben, wird die Syntax wiedererkennen.
Grundlegende Syntax
Ein Ausdruck beginnt immer mit $, der Wurzel des Dokuments. Von dort aus erreicht man Felder per Punkt ($.user.name) oder per Klammern ($['user']['name']), Array-Elemente per Index ($.items[0]).
Mehrere Werte auf einmal auswählen
Das Sternchen * wählt alle Elemente einer Ebene aus, während .. ein rekursiver Abstieg ist — es findet ein Feld in beliebiger Tiefe, ohne den genauen Pfad zu kennen. Filter wie [?(@.price < 10)] wählen Array-Elemente anhand einer Bedingung aus, die wie ein kleiner Programmierausdruck aussieht.
Wofür das gebraucht wird
- Beim Debuggen schnell ein Feld aus einer großen API-Antwort herausziehen, ohne ein Skript zu schreiben.
- JSON-Logs oder -Events spontan nach einer Bedingung filtern.
- Einen Wert aus einer Konfigurationsdatei lesen, ohne einen eigenen Parser zu schreiben.
JSONPath vs. XPath: der klassische Indexfehler
Wer von XPath kommt, wo die Knotenindizierung bei 1 beginnt (book[1] ist das erste Element), verrechnet sich beim Umstieg auf JSONPath oft — dort beginnt die Indizierung bei 0, book[1] ist also schon das zweite Element. Allein dieser Unterschied verursacht einen beachtlichen Teil der Fehler, wenn alte XML/XPath-Integrationen auf JSON-APIs migriert werden.
Schlüssel mit Punkten oder Leerzeichen
Enthält ein Feldname selbst einen Punkt, Bindestrich oder ein Leerzeichen (etwa ein wörtlicher Schlüssel "user.name" statt verschachtelter Felder), wird die Punktnotation $.user.name mehrdeutig — der Parser liest sie als die verschachtelten Felder user und name. In diesem Fall muss der Schlüssel in Klammern mit Anführungszeichen stehen: $['user.name'].