araç köşesi

JSONPath Tester

Einen JSONPath-Ausdruck an Ihrem eigenen JSON ausprobieren; Treffer, Pfade und Trefferzahl sehen

Ihre Daten bleiben bei Ihnen. Die Umwandlung läuft im Browser; nichts wird an einen Server gesendet.

So funktioniert es

Mit JSONPath wählen Sie aus einem großen JSON genau den Teil aus, den Sie brauchen, mit einem einzeiligen Ausdruck. Postman-Tests, API-Gateways und kubectl -o jsonpath in Kubernetes nutzen diese Sprache. Fügen Sie das JSON links ein und tippen Sie den Ausdruck; das Ergebnis rechts ändert sich beim Schreiben. Jeder Ausdruck beginnt mit $, das ist die Wurzel des Dokuments: $.store.book[0].title liefert den Titel des ersten Buchs, $..author alle author-Felder in jeder Tiefe (im Beispiel 4 Namen). Ein Filter in eckigen Klammern wie [?(@.price<10)] behält nur passende Einträge; @ ist der Eintrag, der gerade geprüft wird. Im Beispiel-JSON liefert $.store.book[?(@.price<10)].title zwei Titel: Sayings of the Century und Moby Dick. Zahlen im Filter schreiben Sie mit Punkt (8.95), denn JSON kennt kein Dezimalkomma. Fehlt das $ am Anfang, ergänzt das Werkzeug es und sagt das unten. Gibt es keinen Treffer, erscheint ein leeres Array; prüfen Sie dann die Groß- und Kleinschreibung der Namen. Die Pfad-Ausgabe zeigt die genaue Adresse jedes Werts und damit die Schlüsselkette für Ihren Code.

Dieses Werkzeug ist auch als jsonpath tester, jsonpath online testen, jsonpath beispiele, jsonpath filter, json abfrage online bekannt.

Was ist JSONPath?

JSONPath ist eine kurze Abfragesprache, mit der man Werte aus einem JSON-Dokument auswählt; für JSON ist sie, was XPath für XML ist. $ steht für die Wurzel, der Punkt für ein Unterfeld, [0] für einen Array-Eintrag, [*] für alle Einträge, .. für jede Tiefe und [?(...)] für einen Filter. Seit 2024 ist JSONPath als RFC 9535 standardisiert; Postman und Kubernetes nutzen es.

Was ist Filterausdruck?

Ein Filter behält aus einem Array nur die Einträge, die eine Bedingung erfüllen: [?(@.price<10)] lässt Einträge mit einem Preis unter 10 durch. @ steht für den gerade geprüften Eintrag; erlaubt sind ==, !=, <, >, && und ||. Ohne Vergleich geschrieben, etwa [?(@.isbn)], wählt der Filter alle Einträge, bei denen das Feld vorhanden und nicht leer ist.

Was ist der Unterschied zwischen JSONPath und JSON Pointer?

JSON Pointer (RFC 6901) ist die genaue Adresse genau eines Werts: /store/book/0/author liefert höchstens ein Ergebnis und kennt weder Platzhalter noch Filter. Er steckt in JSON Patch und in $ref von JSON Schema. JSONPath ist dagegen eine Abfragesprache: Ein Ausdruck wie $..author kann viele Werte liefern, und Filter mit Bedingungen sind möglich. Wollen Sie einen bestimmten Wert ändern oder auf ihn verweisen, nehmen Sie JSON Pointer; wollen Sie Daten suchen und filtern, nehmen Sie JSONPath.

Die häufigsten JSONPath-Ausdrücke (mit dem Beispiel-JSON)

Das Beispiel ist das Buchladen-JSON aus Stefan Goessners Beschreibung von 2007, die fast alle JSONPath-Werkzeuge als Grundlage nutzen. Die folgenden Ausdrücke können Sie direkt daran ausprobieren; die Ergebnisse unten stammen aus genau diesem Beispiel.

  • $..author → die 4 Autorennamen (.. sucht in jeder Tiefe)
  • $.store.book[?(@.price<10)].title → 2 Titel: Sayings of the Century, Moby Dick
  • $..book[?(@.isbn)] → die 2 Bücher mit ISBN (Moby Dick, The Lord of the Rings)
  • $..book[-1:] → das letzte Buch; $..book[0,1] → die ersten zwei
  • $..book.length → Anzahl der Bücher (4)
  • $..price → alle 5 Preise, auch der des Fahrrads (19.95)

Ehrliche Grenzen: Unterschiede zu RFC 9535 und Sicherheit

JSONPath ist seit 2024 als RFC 9535 standardisiert. Dieses Werkzeug nutzt die verbreitete Bibliothek jsonpath-plus und folgt der älteren Goessner-Schreibweise: Filter stehen in runden Klammern ([?(@.price<10)]; im RFC sind sie optional), JavaScript-Eigenschaften wie .length funktionieren, die RFC-Funktionen match() und search() fehlen. Derselbe Ausdruck kann in einer anderen Bibliothek leicht abweichen, vor allem bei Textvergleichen im Filter.

Filter laufen nicht über das eval des Browsers, sondern im eigenen, sicheren Interpreter der Bibliothek; Code lässt sich über den Ausdruck nicht ausführen. Fragt ein Filter ein Feld ab, das es nicht gibt ([?(@.verlag.name)]), ist das kein Fehler, sondern einfach kein Treffer.

Häufige Fragen

Wie teste ich einen JSONPath-Ausdruck?

Fügen Sie das JSON links auf dieser Seite ein und tippen Sie den Ausdruck in das JSONPath-Feld. Die Treffer erscheinen sofort rechts, unten steht ihre Anzahl. Stellen Sie Ergebnis auf Gefundene Pfade, sehen Sie zu jedem Wert die genaue Adresse im JSON.

Was ist der Unterschied zwischen $. und $..?

Ein Punkt geht eine Ebene tiefer: $.store.bicycle liefert nur das Feld bicycle im Objekt store. Zwei Punkte suchen in jeder Tiefe: $..price liefert die Preise der Bücher und des Fahrrads, zusammen 5 Werte. Wissen Sie nicht, wo ein Feld liegt, nehmen Sie ..

Wie vergleiche ich Text in einem Filter?

Schreiben Sie den Text in Anführungszeichen: $.store.book[?(@.category=='fiction')].title liefert 3 Titel. Mehrere Bedingungen verbinden Sie mit && (und) oder || (oder): [?(@.category=='fiction' && @.price<20)] liefert noch 2. Fehlt ein schließendes Anführungszeichen, meldet das Werkzeug es.

Wird mein JSON an einen Server gesendet?

Nein. Das Lesen des JSON und die Auswertung des Ausdrucks laufen vollständig in Ihrem Browser. Sie können auch eine Antwort mit API-Schlüsseln oder Kundendaten gefahrlos testen.