ToolDeck

JSONPath Tester

JSONPath-Ausdrücke gegen JSON-Daten testen und Treffer anzeigen

Beispiel ausprobieren

JSON-Eingabe

Ergebnisse

Läuft lokal · Sicher zum Einfügen von Secrets
Ergebnisse erscheinen hier…

Was ist JSONPath?

JSONPath ist eine Abfragesprache zum Extrahieren von Werten aus JSON-Dokumenten. Ursprünglich 2007 von Stefan Goessner als Analogon zu XPath für XML vorgeschlagen, ermöglicht JSONPath das Schreiben von Ausdrücken wie $.store.book[*].author, um alle Autorenfelder innerhalb eines Book-Arrays auszuwählen, ohne Schleifen oder manuellen Traversierungscode zu schreiben. Die Sprache wurde im Februar 2024 als RFC 9535 standardisiert und vom IETF veröffentlicht.

Ein JSONPath-Ausdruck beginnt immer mit $ für den Wurzelknoten des Dokuments. Von dort aus werden Selektoren verkettet: Punktnotation für Objektschlüssel, Klammernotation für Array-Indizes, Wildcards für alle Kinder und der rekursive Abstiegsoperator (..) zur Suche auf jeder Verschachtelungsebene. Filterausdrücke wie [?(@.price < 10)] ermöglichen die Auswahl von Elementen anhand von Bedingungen, die gegen ihre Werte ausgewertet werden.

JSONPath wird in API-Test-Tools wie Postman, Observability-Plattformen wie Datadog und Splunk, Workflow-Engines wie Apache NiFi sowie in Programmierbibliotheken für JavaScript, Python, Go, Java und C# eingesetzt. Das Testen von Ausdrücken gegen echte Daten vor der Einbettung in Code oder Konfigurationsdateien verhindert stille Fehler, wenn die JSON-Struktur nicht den Erwartungen entspricht.

Warum diesen JSONPath Tester verwenden?

JSONPath-Ausdrücke von Hand zu schreiben ist fehleranfällig. Ein fehlender Punkt, ein falscher Klammertyp oder eine falsche Filtersyntax kann leere Ergebnisse ohne Fehlermeldung zurückliefern. Dieses Tool gibt sofortiges visuelles Feedback darüber, was Ihr Ausdruck trifft.

Sofortige Ergebnisse
JSON einfügen, Ausdruck eingeben und die Treffer in Echtzeit sehen. Kein Script ausführen oder Seite neu laden, um die Abfrage zu prüfen.
🔒
Datenschutz zuerst
Die gesamte Auswertung läuft im Browser. Ihre JSON-Daten verlassen Ihren Rechner nicht, sodass Sie Ausdrücke sicher gegen API-Antworten aus der Produktion oder Konfigurationsdateien mit Zugangsdaten testen können.
📋
Ergebnisse direkt kopieren
Treffer als JSON mit einem Klick kopieren. Direkt in Test-Assertions, Dokumentation oder API-Antwortbeispiele einfügen, ohne neu zu formatieren.
🛠️
Keine Einrichtung erforderlich
Keine npm-Pakete zu installieren, keine Python-Virtualenvs zu erstellen. Seite öffnen, Daten einfügen und mit der Abfrage beginnen. Funktioniert auf jedem Gerät mit einem Browser.

JSONPath-Anwendungsfälle

Frontend-Entwicklung
Die genauen verschachtelten Werte aus API-Antworten extrahieren, bevor sie in React-State oder Vue-Computed-Properties eingebunden werden. Pfadausdrücke zuerst gegen die echte API-Nutzlast testen.
Backend-API-Tests
Postman und REST-assured verwenden JSONPath für Assertions auf Response-Bodies. Assertions hier erstellen und überprüfen, bevor sie in Test-Scripts kopiert werden – das reduziert Debug-Zyklen.
DevOps-Konfiguration
Kubernetes-Custom-Resource-Definitionen, AWS Step Functions und Terraform-Datenquellen akzeptieren JSONPath-Ausdrücke zum Extrahieren von Werten aus JSON-Ausgaben. Den Pfad vor dem Deployment validieren.
QA-Testautomatisierung
JSONPath-basierte Assertions für Contract-Tests und Integrationstests schreiben. Sicherstellen, dass Ausdrücke erwartete Werte korrekt treffen, wenn die JSON-Struktur optionale oder nullable Felder enthält.
Daten-Pipeline-Extraktion
Apache NiFi, Logstash und benutzerdefinierte ETL-Scripts verwenden JSONPath zum Extrahieren von Feldern aus halbstrukturierten Log-Daten und Event-Streams. Ausdrücke gegen Beispiel-Nutzlasten testen, bevor die Pipeline deployt wird.
Lernen und Experimentieren
Studierende und Entwickler, die neu in JSONPath sind, können verschiedene Ausdrücke gegen Beispiel-JSON ausprobieren, um zu verstehen, wie Wildcards, rekursiver Abstieg und Filter funktionieren – ohne lokale Umgebung.

JSONPath-Syntaxreferenz

RFC 9535 definiert die Standard-JSONPath-Syntax. Die nachfolgende Tabelle beschreibt die Operatoren, die in den meisten Abfragen verwendet werden. Alle Ausdrücke beginnen mit $ (dem Wurzelknoten) und verketten einen oder mehrere Selektoren zur Navigation durch die Dokumentstruktur.

OperatorBeschreibungBeispiel
$Root element$.store
.keyChild property$.store.book
[n]Array index (zero-based)$.store.book[0]
[*]All elements in array/object$.store.book[*]
..Recursive descent$..author
[start:end]Array slice$.store.book[0:2]
[?()]Filter expression$.store.book[?(@.price<10)]
@Current node (inside filter)$.store.book[?(@.isbn)]

JSONPath vs. jq vs. XPath

JSONPath, jq und XPath lösen dasselbe Problem (strukturierte Daten abfragen) für unterschiedliche Formate und Anwendungsfälle. JSONPath zielt auf JSON und ist als Bibliothek in den meisten Sprachen verfügbar. jq ist ein eigenständiges CLI-Tool mit einer eigenen Turing-vollständigen Filtersprache. XPath arbeitet auf XML und ist Teil des W3C-Spezifikations-Stacks.

MerkmalJSONPathjqXPath
DatenformatJSONJSONXML
Erstes Element abrufen$.store.book[0].store.book[0]/store/book[1]
Rekursive Suche$..price.. | .price?//price
Filterausdruck[?(@.price<10)]select(.price < 10)[price<10]
SpezifikationRFC 9535stedolan.github.ioW3C XPath 3.1

Codebeispiele

So werden JSONPath-Ausdrücke in gängigen Sprachen und Tools ausgewertet. Alle Beispiele verwenden dieselbe Buchhandlungs-JSON-Struktur zum Vergleich.

JavaScript (jsonpath-plus)
import { JSONPath } from 'jsonpath-plus';

const data = {
  store: {
    book: [
      { title: 'Moby Dick', price: 8.99 },
      { title: 'The Great Gatsby', price: 12.99 }
    ]
  }
};

// Get all book titles
JSONPath({ path: '$.store.book[*].title', json: data });
// → ['Moby Dick', 'The Great Gatsby']

// Recursive descent — find every price in the document
JSONPath({ path: '$..price', json: data });
// → [8.99, 12.99]

// Filter — books under $10
JSONPath({ path: '$.store.book[?(@.price < 10)]', json: data });
// → [{ title: 'Moby Dick', price: 8.99 }]
Python (jsonpath-ng)
from jsonpath_ng.ext import parse
import json

data = {
    "store": {
        "book": [
            {"title": "Moby Dick", "price": 8.99},
            {"title": "The Great Gatsby", "price": 12.99}
        ]
    }
}

# Get all book titles
expr = parse("$.store.book[*].title")
titles = [match.value for match in expr.find(data)]
# → ['Moby Dick', 'The Great Gatsby']

# Recursive descent — all prices
expr = parse("$..price")
prices = [match.value for match in expr.find(data)]
# → [8.99, 12.99]

# Filter — books under $10
expr = parse("$.store.book[?price < 10]")
cheap = [match.value for match in expr.find(data)]
# → [{"title": "Moby Dick", "price": 8.99}]
Go (ohler55/ojg)
package main

import (
    "fmt"
    "github.com/ohler55/ojg/jp"
    "github.com/ohler55/ojg/oj"
)

func main() {
    src := `{
        "store": {
            "book": [
                {"title": "Moby Dick", "price": 8.99},
                {"title": "The Great Gatsby", "price": 12.99}
            ]
        }
    }`

    obj, _ := oj.ParseString(src)

    // Get all book titles
    expr, _ := jp.ParseString("$.store.book[*].title")
    results := expr.Get(obj)
    fmt.Println(results)
    // → [Moby Dick The Great Gatsby]

    // Recursive descent — all prices
    expr2, _ := jp.ParseString("$..price")
    fmt.Println(expr2.Get(obj))
    // → [8.99 12.99]
}
CLI (jq alternative syntax)
# jq uses its own syntax, not JSONPath, but solves the same problem.
# Mapping common JSONPath patterns to jq:

# $.store.book[*].title → get all titles
echo '{"store":{"book":[{"title":"Moby Dick"},{"title":"Gatsby"}]}}' | \
  jq '.store.book[].title'
# → "Moby Dick"
# → "Gatsby"

# $..price → recursive descent for "price" keys
echo '{"a":{"price":1},"b":{"price":2}}' | \
  jq '.. | .price? // empty'
# → 1
# → 2

# Filter: books where price < 10
echo '{"store":{"book":[{"title":"A","price":8},{"title":"B","price":12}]}}' | \
  jq '.store.book[] | select(.price < 10)'
# → {"title":"A","price":8}

Häufig gestellte Fragen

Was ist der Unterschied zwischen JSONPath und jq?
JSONPath ist eine Abfragesprache, die als Bibliothek in Anwendungen eingebettet werden soll. Sie gibt übereinstimmende Werte aus einem JSON-Dokument anhand von Pfadausdrücken zurück. jq ist ein eigenständiges Kommandozeilen-Tool mit einer vollständigen Programmiersprache zur JSON-Transformation, einschließlich Bedingungen, Funktionen und String-Interpolation. JSONPath eignet sich, wenn eine Abfrage in Code oder ein Tool wie Postman benötigt wird. jq eignet sich für Ad-hoc-Datentransformationen auf der Kommandozeile.
Ist JSONPath ein offizieller Standard?
Ja. Das IETF hat RFC 9535 ("JSONPath: Query Expressions for JSON") im Februar 2024 veröffentlicht. Davor existierte JSONPath nur als informelle Spezifikation von Stefan Goessner aus dem Jahr 2007, was zu Inkonsistenzen zwischen Implementierungen führte. RFC 9535 definiert Syntax, Semantik und ein Normalisierungsformat für die Interoperabilität.
Wie funktioniert der rekursive Abstieg (..) in JSONPath?
Der rekursive Abstiegsoperator (..) durchsucht jede Ebene des JSON-Dokuments nach dem folgenden Schlüssel. Zum Beispiel gibt $..price alle Werte zurück, die mit dem Schlüssel "price" verknüpft sind, unabhängig von der Verschachtelungstiefe. Das entspricht einer Tiefensuche, die übereinstimmende Knoten sammelt. Bei großen Dokumenten kann der rekursive Abstieg viele Ergebnisse zurückliefern und langsamer als ein direkter Pfad sein.
Kann JSONPath JSON-Daten verändern?
Nein. JSONPath ist eine rein lesende Abfragesprache. Sie wählt Werte aus und gibt sie zurück, kann aber keine Knoten einfügen, aktualisieren oder löschen. Um JSON basierend auf einem JSONPath-Ausdruck zu ändern, müssen nach der Abfrage die JSON-Manipulationsfunktionen der verwendeten Programmiersprache eingesetzt werden. Einige Bibliotheken wie jsonpath-ng in Python bieten eine set()-Methode auf Match-Objekten, aber das ist eine Bibliothekserweiterung und kein Bestandteil der JSONPath-Spezifikation.
Was bedeutet das @-Symbol in JSONPath-Filterausdrücken?
Das @-Symbol bezieht sich auf den aktuellen Knoten, der in einem Filterausdruck ausgewertet wird. In $.store.book[?(@.price < 10)] iteriert der Filter über jedes Element des Book-Arrays, und @ repräsentiert jeweils das aktuelle Book-Objekt. @.price greift auf das price-Feld des aktuellen Buchs zu. Ohne @ wüsste der Filter nicht, welche Eigenschaften welches Knotens geprüft werden sollen.
Wie gehe ich mit Schlüsseln mit Sonderzeichen oder Leerzeichen in JSONPath um?
Klammernotation mit Anführungszeichen verwenden: $['store']['book title']. Klammernotation funktioniert für jeden Schlüssel, auch solche mit Punkten, Leerzeichen oder Unicode-Zeichen. Punktnotation ($.store.key) funktioniert nur für Schlüssel, die gültige Bezeichner sind (Buchstaben, Ziffern, Unterstriche). RFC 9535 verlangt, dass Implementierungen sowohl einfach- als auch doppelt-quotierte Klammernotation unterstützen.
Warum gibt mein JSONPath-Ausdruck leere Ergebnisse zurück?
Die häufigsten Ursachen sind: ein Tippfehler in einem Schlüsselnamen (JSONPath unterscheidet Groß- und Kleinschreibung), Punktnotation für einen Schlüssel mit Sonderzeichen, fehlendes $-Wurzelsymbol am Anfang oder die Annahme, ein Wert sei ein Array, obwohl es ein einzelnes Objekt ist. Das JSON in ein Tester-Tool einfügen und zunächst einfachere Teilausdrücke (wie $.store) ausprobieren, um zu überprüfen, ob jedes Segment des Pfads korrekt aufgelöst wird, bevor weitere Selektoren hinzugefügt werden.