JSONPath-Abfrageleitfaden: Präzise Extraktion verschachtelter Daten aus JSON

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.

#JSONPath#数据查询#嵌套#过滤#提取