JSONPath-Abfrageleitfaden: Präzise Extraktion verschachtelter Daten aus JSON
Was ist JSONPath
JSONPath ist eine JSON-Abfragesprache, ähnlich wie XPath für XML, die Daten präzise aus komplex verschachteltem JSON extrahiert:
{
"store": {
"books": [
{"title": "The Three-Body Problem", "price": 68},
{"title": "To Live", "price": 45},
{"title": "One Hundred Years of Solitude", "price": 55}
]
}
}
Verwenden Sie $.store.books[*].title, um alle Titel zu extrahieren: ["The Three-Body Problem", "To Live", "One Hundred Years of Solitude"]
Grundlegende Syntaxreferenz
| Syntax | Bedeutung | Beispiel |
|---|---|---|
$ |
Wurzelknoten | $ |
. |
Untergeordneter Knoten | $.store |
[] |
Array-Index oder untergeordneter Knoten | $[0], $['key'] |
* |
Platzhalter, alle Elemente | $.store.* |
.. |
Rekursiver Abstieg, alle Ebenen | $..title |
[start:end] |
Array-Slice | $[0:2] |
[?(expr)] |
Filterausdruck | $[?(@.price > 50)] |
Syntax im Detail erklärt
Wurzelknoten $
$ repräsentiert die JSON-Wurzel. Alle Pfade beginnen bei $:
$ → Das gesamte JSON
$.store → Das store-Objekt
Zugriff auf untergeordnete Knoten .
Verwenden Sie . oder [], um auf untergeordnete Knoten zuzugreifen:
$.store.books → Das books-Array
$.store['books'] → Äquivalente Form; erforderlich wenn Schlüsselnamen Sonderzeichen enthalten
Array-Index []
$.store.books[0] → Erstes Buch
$.store.books[-1] → Letztes Buch
$.store.books[0:2] → Erste zwei Bücher (Slice)
Platzhalter *
$.store.books[*] → Alle Bücher
$.store.books[*].title → Alle Titel
Rekursiver Abstieg ..
.. durchsucht alle Ebenen ohne den vollständigen Pfad zu benötigen:
$..title → Alle title-Felder auf jeder Ebene
$..price → Alle price-Felder auf jeder Ebene
..ist besonders nützlich bei tief verschachtelten API-Antworten.
Filterausdrücke ?()
Filterung ist das leistungsstärkste Feature von JSONPath:
Vergleichsoperatoren
| Operator | Bedeutung | Beispiel |
|---|---|---|
== |
Gleich | $[?(@.price == 45)] |
!= |
Ungleich | $[?(@.price != 45)] |
> |
Größer als | $[?(@.price > 50)] |
< |
Kleiner als | $[?(@.price < 50)] |
>= |
Größer oder gleich | $[?(@.price >= 55)] |
Logische Operatoren
$[?(@.price > 50 && @.price < 70)] → Preis zwischen 50 und 70
$[?(@.category == 'fiction' || @.price < 40)] → Belletristik oder Preis unter 40
Zeichenfolgenabgleich
$[?(@.title =~ /Three.*/)] → Titel beginnend mit „Three"
Verwendung des JSONPath-Tools
Schritt 1: Das Tool öffnen
Besuchen Sie das JSONPath-Tool, um die Abfrageoberfläche aufzurufen.
Schritt 2: JSON-Daten eingeben
Fügen Sie Ihre API-Antwort oder JSON-Daten in das Eingabefeld ein. Sie können diese vorher mit dem JSON-Formatierer verschönern.
Schritt 3: Einen JSONPath-Ausdruck schreiben
Geben Sie einen Ausdruck in das Abfragefeld ein, z. B. $.data.users[*].name.
Schritt 4: Extraktionsergebnisse anzeigen
Das Tool zeigt übereinstimmende Ergebnisse in Echtzeit an und hebt gefundene Knoten in der Quelle hervor.
Praxis: Daten aus API-Antworten extrahieren
GitHub-API-Beispiel
{
"items": [
{"full_name": "vuejs/vue", "stargazers_count": 45000, "language": "TypeScript"},
{"full_name": "facebook/react", "stargazers_count": 42000, "language": "JavaScript"}
]
}
$.items[*].full_name → Alle Repo-Namen
$.items[?(@.stargazers_count > 43000)].full_name → Repo-Namen mit Stars > 43000
Extraktion paginierter Daten
$.data.list[*].id → Alle IDs auf der aktuellen Seite
$.pagination.next_cursor → Cursor der nächsten Seite
JSONPath vs JMESPath
| Vergleich | JSONPath | JMESPath |
|---|---|---|
| Syntax-Stil | XPath-ähnlich | SQL/Pipe-ähnlich |
| Rekursive Suche | .. nativ unterstützt |
Erfordert explizite Traversierung |
| Filtersyntax | [?(@.x > 1)] |
[?x > 1] |
| Projektion/Transformation | Nicht unterstützt | Unterstützt [*].{n: name} |
| Sortierung mehrerer Ergebnisse | Nicht garantiert | Kann sortieren |
| Tool | JSONPath | JMESPath |
Verwenden Sie JSONPath für einfache Extraktion, JMESPath für Transformation/Projektion.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Abfrage liefert leer | Tippfehler im Pfad | Groß-/Kleinschreibung der Schlüsselnamen prüfen |
| Filter funktioniert nicht | Syntax-Versionsunterschied | Die unterstützte Syntaxversion des Tools bestätigen |
| Array-Index außerhalb des Bereichs | Index überschreitet Bereich | [*] verwenden oder Array-Länge prüfen |
| Zu viele rekursive Ergebnisse | .. hat alle Ebenen getroffen |
Scope einschränken oder Filterbedingungen hinzufügen |
| Fehler bei Sonderzeichen im Schlüssel | Schlüssel enthält . oder - |
Klammersyntax ['key.name'] verwenden |
Zusammenfassung
JSONPath ist ein leistungsstarkes Werkzeug für die Arbeit mit JSON-Daten. Beherrschen Sie die sechs Kernelsyntax-Elemente — $, ., [], *, .., ?() — und Sie können Daten präzise aus jedem verschachtelten JSON extrahieren. Das JSONPath-Tool bietet Echtzeit-Abfragen mit Hervorhebung, während JMESPath und der JSON-Formatierer Ihren JSON-Datenverarbeitungs-Workflow vervollständigen.