So verwenden Sie es
- Fügen Sie das JSON-Dokument in JSON-Dokument ein. Zum Ausprobieren nutzen Sie zuerst das Beispiel.
- Tippen Sie die JSONPath-Abfrage in das Feld darunter, beginnend mit $. Filter stehen in Klammern: [[email protected] < 10].
- Lesen Sie die Anzahl unter Treffer ab und dann die Tabelle Treffer in Reihenfolge: Jede Zeile hat den Pfad eines Treffers und seinen Wert.
- Nennt eine Meldung die Stelle eines Problems, sehen Sie sich dieses Zeichen der Abfrage an und korrigieren Klammern, Anführungszeichen oder Punkte.
Wie eine Abfrage Knoten auswählt
Eine Abfrage ist eine Liste von Segmenten nach $. Ein Kindsegment wie .store oder [0] wählt die Kinder jedes erreichten Knotens. Ein Nachfahrensegment wie ..author besucht den Knoten und alle seine Nachfahren, bevor es auswählt. Die Knoten eines Segments stehen in der Reihenfolge der Eingabe, und ein Array wird immer in seiner Reihenfolge gelesen (RFC 9535, Abschnitte 2.5 und 2.5.2.2).
Ein Namensselektor trifft nur ein Mitglied mit genau diesem Namen und nur in einem Objekt. Ein negativer Index zählt vom Ende eines Arrays, daher ist -1 das letzte Element. Ein Slice wie [1:5:2] nimmt Start, Ende und Schritt, und ein Schritt von 0 wählt nichts aus (Abschnitt 2.3.4.2).
Filter, Funktionen und was das Werkzeug ablehnt
Ein Filter [?...] prüft jedes Kind eines Arrays oder Objekts. Vergleiche verwenden ==, !=, <, <=, > und >=; && , || und ! verbinden Prüfungen, und Klammern gruppieren sie. Ein fehlendes Mitglied ist Nothing, und zwei Nothing-Werte sind gleich. Zahlen werden mit Zahlen verglichen, Text mit Text, und ein Wert eines Typs ist nie gleich einem Wert eines anderen Typs (Abschnitt 2.3.5.2).
Die Funktionen length, count, value, match und search werden wie in RFC 9535 unterstützt. match und search nehmen einen regulären Ausdruck in I-Regexp, dem Format von RFC 9485. Ein Muster, das kein gültiges I-Regexp ist, trifft nichts. Array- und Objektliterale gehören nicht zur Grammatik, daher lehnt das Werkzeug sie ab. Es lehnt auch ein Funktionsergebnis ab, das allein in einem Filter steht, weil RFC 9535 sagt, dass dies nicht korrekt typisiert ist.
Das Buchladen-Beispiel
Mit dem Beispieldokument und der Abfrage $.store.book[[email protected] < 10].title sind die Bücher, die weniger als 10 kosten, das erste und das dritte. Ihre Titel sind die beiden Treffer unten, mit dem normierten Pfad jedes Treffers.
| Normierter Pfad | Wert (JSON) |
|---|---|
| $['store']['book'][0]['title'] | "Sayings of the Century" |
| $['store']['book'][2]['title'] | "Moby Dick" |
Häufig gestellte Fragen
Warum liefert eine Abfrage nichts, obwohl der Schlüssel existiert?
Ein Namensselektor trifft nur ein Mitglied eines Objekts mit genau diesem Namen, und der Vergleich unterscheidet Groß- und Kleinschreibung. Er trifft nie ein Element eines Arrays, verwenden Sie für ein Array daher einen Index oder einen Platzhalter.
Warum sind 13 und "13" im Filter nicht gleich?
RFC 9535 vergleicht Werte verschiedener Typen als ungleich (Abschnitt 2.3.5.3). Eine Zahl und ein Text sind verschiedene Werte, daher ist == falsch und != wahr, auch wenn die Zeichen gleich aussehen.
Was wählt ein negativer Index aus?
Ein negativer Index zählt vom Ende des Arrays: -1 ist das letzte Element und -2 das davor. Ein Index außerhalb des Arrays wählt nichts aus und ist kein Fehler (Abschnitt 2.3.3.2).
Warum lehnt das Werkzeug length(@) ab, wenn es allein in einem Filter steht?
length liefert eine Zahl, ein Filter braucht aber eine Prüfung, die wahr oder falsch ist. Vergleichen Sie das Ergebnis, etwa in [?length(@.title) > 15], das korrekt typisiert ist.
Sendet das Werkzeug mein JSON an einen Server?
Nein. Das Dokument wird in Ihrem Browser mit JSON.parse gelesen, die Abfrage läuft ebenfalls dort, und nichts wird gespeichert. Die Seite stellt keine Netzwerkanfrage.
Quellen
- RFC 9535 (englisch): JSONPath: Query Expressions for JSON, Abschnitte 1.5, 2.3, 2.4, 2.5 und 2.7
- RFC 9485 (englisch): I-Regexp: An Interoperable Regular Expression Format, Abschnitte 3 und 5.3
Zahlen und Text zuletzt geprüft: Dienstag, 10. November 2026.