alltools.one
JSON‱
2025-07-04
‱
8 min
‱
alltools.one Team
JSONJSONPathQueryData ExtractionAPI

JSONPath-Abfrage-Leitfaden: Daten wie ein Profi extrahieren

JSONPath ist eine Abfragesprache fĂŒr JSON, Ă€hnlich wie XPath fĂŒr XML funktioniert. Wenn Sie mit komplexen, tief verschachtelten JSON-Antworten von APIs arbeiten, können Sie mit JSONPath genau die Daten extrahieren, die Sie benötigen, ohne Schleifen und Bedingungen zu schreiben. Dieser Leitfaden behandelt die Syntax, Operatoren und praxisnahe Muster, die Sie brauchen.

Warum JSONPath?

Betrachten Sie eine typische API-Antwort mit verschachtelten Daten:

{
  "store": {
    "books": [
      { "title": "Clean Code", "author": "Robert Martin", "price": 32.99, "tags": ["programming", "best-practices"] },
      { "title": "Design Patterns", "author": "Gang of Four", "price": 44.99, "tags": ["programming", "architecture"] },
      { "title": "The Pragmatic Programmer", "author": "Hunt & Thomas", "price": 39.99, "tags": ["programming", "career"] }
    ],
    "music": [
      { "title": "Kind of Blue", "artist": "Miles Davis", "price": 12.99 }
    ]
  }
}

Um alle Buchtitel zu erhalten, könnten Sie eine Schleife schreiben — oder JSONPath verwenden: $.store.books[*].title

Grundlegende Syntax

AusdruckBeschreibung
$Wurzelobjekt
.Kind-Operator
..Rekursiver Abstieg (alle Ebenen durchsuchen)
[*]Wildcard (alle Elemente)
[n]Array-Index (0-basiert)
[n,m]Mehrere Indizes
[start:end:step]Array-Slice
[?()]Filterausdruck
@Aktuelles Element (in Filtern)

Punkt-Notation vs. Klammer-Notation

Beide Notationen greifen auf Eigenschaften zu, aber die Klammer-Notation ist fĂŒr Sonderzeichen erforderlich:

# Dot notation
$.store.books[0].title

# Bracket notation (equivalent)
$['store']['books'][0]['title']

# Required for keys with special characters
$['store']['price-range']

Array-Operationen

Indizierung

$.store.books[0]          # First book
$.store.books[-1]         # Last book
$.store.books[0,2]        # First and third books

Slicing

$.store.books[0:2]        # First two books (index 0 and 1)
$.store.books[1:]         # All books except the first
$.store.books[:2]         # First two books
$.store.books[::2]        # Every other book

Wildcards

$.store.books[*].title    # All book titles
$.store.*                 # All store collections (books, music)
$..title                  # All titles at any depth
$..price                  # All prices at any depth

Der Operator fĂŒr rekursiven Abstieg (..) ist besonders leistungsfĂ€hig zum Extrahieren von Werten unabhĂ€ngig von ihrer Position in der Hierarchie.

FilterausdrĂŒcke

Filter wÀhlen Elemente basierend auf Bedingungen aus:

# Books cheaper than $40
$.store.books[?(@.price < 40)]

# Books by a specific author
$.store.books[?(@.author == 'Robert Martin')]

# Books with more than 2 tags
$.store.books[?(@.tags.length > 2)]

# Books that have a 'price' property
$.store.books[?(@.price)]

Filter kombinieren

# Books under $40 by programming tag
$.store.books[?(@.price < 40 && @.tags[0] == 'programming')]

Praxisbeispiele

Aus API-Antworten extrahieren

GitHub API — alle Repository-Namen abrufen:

$[*].name

Wetter-API — heutige Temperatur abrufen:

$.daily[0].temp.day

E-Commerce-API — alle Produktbilder abrufen:

$.products[*].images[0].url

Konfigurationsextraktion

Docker Compose — alle Servicenamen abrufen:

$.services.*~

Package.json — alle AbhĂ€ngigkeitsnamen abrufen:

$.dependencies.*~

JSONPath vs. jq

JSONPath und jq sind beide JSON-Abfragetools, dienen aber unterschiedlichen Kontexten:

EigenschaftJSONPathjq
UmgebungBibliotheken, APIsKommandozeile
SyntaxXPath-inspiriertBenutzerdefiniert funktional
TransformationNur AbfrageAbfrage + Transformation
StandardRFC 9535De-facto-Standard

FĂŒr die Kommandozeilen-JSON-Verarbeitung ist jq leistungsfĂ€higer. FĂŒr das Einbetten von Abfragen in Anwendungen oder die Verwendung in Web-Tools wird JSONPath breiter unterstĂŒtzt.

Testen Sie JSONPath-AusdrĂŒcke interaktiv mit unserem JSON Path Explorer. FĂŒgen Sie Ihr JSON ein, schreiben Sie eine Abfrage und sehen Sie sofort Ergebnisse.

Implementierungsbeispiele

JavaScript (jsonpath-plus)

const { JSONPath } = require('jsonpath-plus');
const result = JSONPath({
  path: '$.store.books[?(@.price < 40)].title',
  json: data
});
// ["Clean Code", "The Pragmatic Programmer"]

Python (jsonpath-ng)

from jsonpath_ng import parse
expr = parse('$.store.books[*].title')
titles = [match.value for match in expr.find(data)]

RFC 9535: Der JSONPath-Standard

Im Februar 2024 wurde JSONPath offiziell als RFC 9535 standardisiert. Dies behebt historische Inkonsistenzen zwischen Implementierungen. Wichtige standardisierte Verhaltensweisen:

  • Array-Indizes sind 0-basiert
  • FilterausdrĂŒcke verwenden @ fĂŒr das aktuelle Element
  • String-Vergleich ist case-sensitive
  • Das Ergebnis ist immer ein Array von ĂŒbereinstimmenden Werten

Wenn Sie eine JSONPath-Bibliothek wĂ€hlen, bevorzugen Sie eine, die RFC 9535 unterstĂŒtzt, fĂŒr konsistentes Verhalten.

FAQ

Was ist der Unterschied zwischen JSONPath und JSON Pointer?

JSONPath ist eine Abfragesprache, die mehrere Werte mit Wildcards und Filtern abgleichen kann. JSON Pointer (RFC 6901) ist eine einfache Pfadsyntax, die genau einen Wert adressiert: /store/books/0/title. Verwenden Sie JSONPath, wenn Sie suchen oder filtern mĂŒssen; verwenden Sie JSON Pointer, wenn Sie den genauen Pfad kennen.

Kann JSONPath JSON-Daten Àndern?

Standard-JSONPath ist schreibgeschĂŒtzt — es extrahiert, aber Ă€ndert keine Daten. Einige Bibliotheken erweitern JSONPath um Set/Delete-Operationen, aber diese sind nicht standardisiert. FĂŒr Transformationen verwenden Sie jq (Kommandozeile) oder schreiben Sie Anwendungscode. Zum Anzeigen und Erkunden der JSON-Struktur hilft Ihnen unser JSON Formatter, die Daten vor dem Schreiben von Abfragen zu verstehen.

Verwandte Ressourcen

Published on 2025-07-04
JSONPath Query Guide: Extracting Data Like a Pro | alltools.one