JSONPath-Abfrage
JSONFühren Sie JSONPath-/jq-artige Abfragen auf einem JSON-Dokument aus und heben Sie jeden Treffer hervor.
Remote-URLs werden nicht abgerufen; fügen Sie Ihr JSON direkt ein.
Auf dieser Seite
Was ist ein JSONPath-Tester?#
Wenn ein JSON-Dokument klein ist, liest man es mit den Augen. Wenn es aber einige tausend Zeilen umfasst — eine API-Antwort, ein Konfigurations-Dump, ein Abhängigkeitsbaum — hören die Augen auf, das richtige Werkzeug zu sein. JSONPath ist die Abfragesprache für genau diese Situation: ein kompakter Ausdruck, der sagt „gib mir jedes price-Feld“, oder „die Titel der Bücher, die billiger als 10 sind“, oder „jeder Knoten namens isbn, egal wie tief er vergraben ist“.
Denken Sie daran als eine Kreuzung aus einem Dateipfad und einer winzigen Filtersprache. $.store.book[0].title steigt durch eine bekannte Struktur hinab, wie es ein Dateisystem-Pfad tut. $..author sagt: „steige rekursiv ab und sammle jeden author, den du findest“. [?(@.price < 10)] ist ein Filter: behalte nur die Elemente, bei denen price des aktuellen Knotens unter zehn liegt. Das @ bedeutet immer: „der Knoten, den ich gerade betrachte“.
Diese Seite führt einen JSONPath-Ausdruck gegen Ihr JSON aus, listet jeden Treffer auf und — der Teil, der die meiste Zeit spart — hebt die Treffer-Bereiche direkt im formatierten Dokument hervor, sodass Sie auf einen Blick sehen, ob Ihr Ausdruck das ausgewählt hat, was Sie denken. Filter werden mit einem sicheren Ausdrucks-Parser ausgewertet, niemals durch Code-Ausführung, sodass ein nicht vertrauenswürdiger Block nichts ausführen kann.
Verwendung#
- Fügen Sie Ihr JSON in die Eingabe-Fläche links ein, oder klicken Sie auf Beispiel, um die klassische Buchhandlungs-Fixture zu laden.
- Tippen Sie einen JSONPath-Ausdruck in das Feld JSONPath rechts. Gängige Startpunkte:
$.store.book[*].author— derauthorjedes Array-Elements.$..author— rekursiver Abstieg: jederauthor, überall.$.store.book[?(@.price < 10)].title— ein Filterausdruck.$.store.book[?(@.isbn)].isbn— ein Existenztest (hat einenisbn-Schlüssel).
- Die Trefferliste unter dem Feld füllt sich mit einem Eintrag pro Ergebnis, und die vollbreite JSON-Vorschau darunter hebt jeden Treffer-Bereich an Ort und Stelle hervor.
- Die Kopfzeile neben Treffer zeigt die Anzahl. Ein Ausdruck, der null Knoten trifft, meldet dennoch Erfolg (leere Liste) — nur ein syntaktisch fehlerhafter Ausdruck zeigt einen Fehler.
- Klicken Sie auf Treffer kopieren in der Werkzeugleiste, um die Treffer-Werte als JSON-Array zu übernehmen, oder auf Leeren, um beide Flächen zurückzusetzen.
Abfragen feuern beim Tippen. Wenn das JSON selbst ungültig ist, zeigt die Statusleiste auf die genaue Zeile und Spalte zur Korrektur.
Eckpunkte#
- Hervorhebung an Ort und Stelle. Jeder Treffer-Wert wird auf das formatierte Dokument gelegt, sodass ein rekursiver
$.., der dreißig Knoten greift, sofort sichtbar ist, statt in einer Liste zu verschwinden. - Sichere Filterauswertung. Ausdrücke wie
[?(@.price < 10)]werden von einem Ausdrucks-Evaluator geparst, nicht an dynamische Code-Ausführung übergeben — die Seite bleibt CSP-sicher, auch bei feindlicher Eingabe. - Getrennt „kein Treffer“ vs. „Fehler“. Ein gültiger Ausdruck, der nichts auswählt, wird als null Treffer gemeldet; nur ein fehlerhafter Ausdruck wird als Fehler markiert. Sie verwechseln nie „nichts gefunden“ mit „kaputt“.
- Zeiger pro Treffer. Jedes Ergebnis trägt seinen JSON-Pointer (zum Beispiel
/store/book/2/title), sodass Sie genau wissen, wo im Baum ein Wert herkommt. - Als Array kopieren. Die Treffer-Werte werden als sauberes JSON-Array exportiert, bereit zum Weiterreichen an den nächsten Schritt.
- Nur lokal. Ihre Daten werden im Browser abgefragt. Es gibt kein Backend und keinen Upload.
Konkretes Beispiel#
Laden Sie Beispiel und führen Sie dann einen Filter aus, der die Titel billiger Bücher findet. Geben Sie dies in das Feld JSONPath ein:
$.store.book[?(@.price < 10)].title
Die Trefferliste liefert zwei Titel zurück, weil nur zwei der vier Bücher der Fixture unter 10 liegen:
[
"Sayings of the Century",
"Moby Dick"
]
Die JSON-Vorschau hebt diese beiden title-Werte an Ort und Stelle hervor, und Sie sehen, warum die anderen beiden ausgeschlossen wurden — Sword of Honour (12.99) und The Lord of the Rings (22.99) liegen über der Schwelle. Wechseln Sie zu einem Existenztest, um zu finden, welche Bücher eine ISBN tragen:
$.store.book[?(@.isbn)].isbn
Das liefert die beiden ISBN-Strings und sonst nichts, weil der Filter nur Elemente behält, die tatsächlich einen isbn-Schlüssel haben — ein praktisches Muster, um „welche Datensätze vermissen ein Feld“ durch Negation zu finden.
FAQ#
Was ist der Unterschied zwischen $ und @?#
$ ist die Wurzel des Dokuments — der gesamte JSON-Wert, den Sie eingefügt haben. @ ist der aktuelle Knoten, der innerhalb eines Filters betrachtet wird. In [?(@.price < 10)] bezieht sich das @ also auf dasjenige Buch, das der Filter gerade prüft; $.price würde dort zurück zur Wurzel springen und nach einem price der obersten Stufe suchen, das nicht existiert.
Mein Ausdruck trifft nichts. Ist das ein Bug?#
Wahrscheinlich nicht. Ein gültiger Ausdruck, der null Knoten auswählt, ist eine erfolgreiche Abfrage mit leerem Ergebnis — zum Beispiel bedeutet $.store.book[?(@.price > 1000)] auf dem Beispiel schlicht, dass kein Buch so teuer ist. Die Kopfzeile liest „0 Treffer“ ohne Fehler. Erst wenn der Ausdruck selbst nicht parsbar ist, meldet die Seite einen Fehler.
Warum führt ein Filter kein beliebiges JavaScript aus?#
Filter werden von einem dedizierten Ausdrucks-Parser ausgewertet, der Vergleiche, Boolesche Operatoren und @-Referenzen versteht — er baut und führt niemals Code aus. Das ist bewusst: Es hält das Werkzeug sicher, es auf JSON zu richten, dem Sie nicht vollständig vertrauen, und es hält die Seite innerhalb der Content-Security-Policy des Browsers.
Kann JSONPath Knoten bearbeiten oder entfernen?#
Nein — dies ist ein Nur-Lese-Abfrage-Werkzeug. Es wählt aus und zeigt an, es mutiert Ihr JSON nicht. Wenn Sie stattdessen sehen möchten, wie sich zwei Dokumente unterscheiden, greifen Sie zum Werkzeug /en/json/diff/.