Ratgeber · JSON 2026
JSONPath-Queries: gezielt Daten aus JSON-Bäumen extrahieren
RFC 9535 hat JSONPath 2024 finalisiert. jq bleibt mächtiger, aber JSONPath wird breiter unterstützt und ist im Browser direkt nutzbar.
Von Mateusz Viola
Betreiber & redaktionelle Verantwortung json-formatieren.de
Veröffentlicht
Aktualisiert:
Was JSONPath ist
JSONPath ist eine Query-Sprache für JSON-Dokumente, inspiriert von XPath. Stefan Gössner hat sie 2007 vorgeschlagen, lange Zeit gab es nur einen Quasi-Standard. Seit RFC 9535 (Februar 2024) ist JSONPath offiziell IETF-standardisiert.
Grundidee: mit einer kompakten Query-Notation gezielte Werte aus einem JSON-Baum extrahieren - ohne den kompletten Baum manuell zu durchwandern.
Syntax-Grundlagen
| Operator | Bedeutung | Beispiel |
|---|---|---|
$ | Root-Element | $ |
.field | Child-Access | $.store.name |
['field'] | Bracket-Notation (für Special-Chars) | $['my-key'] |
[*] | Alle Elemente eines Arrays/Objects | $.items[*] |
[0] | Index-Access | $.items[0] |
[0:5] | Slice | $.items[0:5] |
.. | Recursive Descent (alle Tiefen) | $..author |
?(expr) | Filter-Expression | $.items[?(@.price<10)] |
Beispiel-Queries
Sample-Dokument (Crockfords Klassiker):
{
"store": {
"book": [
{ "category": "fiction", "author": "Tolkien", "title": "LotR", "price": 22.99 },
{ "category": "reference", "author": "Knuth", "title": "TAOCP", "price": 89.95 },
{ "category": "fiction", "author": "Asimov", "title": "Foundation", "price": 13.50 }
]
}
}
| Query | Bedeutung |
|---|---|
$.store.book[*].author | Alle Autoren |
$..author | Alle Autor-Felder im ganzen Baum |
$..book[2] | Drittes Buch (Asimov) |
$..book[-1] | Letztes Buch (Asimov) |
$..book[?(@.price < 20)] | Bücher unter 20 € |
$..book[?(@.category=='fiction')] | Nur Fiction |
JSONPath vs jq
Beide lösen ähnliche Probleme. Unterschiede:
| Aspekt | JSONPath | jq |
|---|---|---|
| Standard | RFC 9535 (2024) | de-facto, kein Standard |
| Sprache | nur Query | Query + Transformationen |
| Mächtigkeit | mittel | hoch (komplette Sprache) |
| Browser-Nutzung | direkt via JS-Library | WASM-Variante, schwerer |
| CLI | jp (jp-lang) | jq (überall installiert) |
Faustregel: für reine Query-Aufgaben im Browser oder in Apps: JSONPath. Für komplexere Transformationen in Shell-Pipelines: jq.
JavaScript-Libraries
- jsonpath-plus - am breitesten genutzt, etwas alt
- @astronautlabs/jsonpath - RFC-9535-konform, modern
- jsonpath - die alte Original-Library, von Sttefan Gössner
Praxis-Use-Cases
- Postman-Tests: Postman-CLI nutzt JSONPath für Response-Assertions
- Splunk: spath-Command in der Splunk-Search-Language verwendet JSONPath-Syntax
- Kubernetes kubectl:
kubectl get pods -o jsonpath='{.items[*].metadata.name}' - Azure-CLI / Bicep: für ARM-Output-Extraction
- JMESPath (AWS-CLI) ist verwandt aber nicht identisch - eigenes Format
Limitierungen
JSONPath ist eine Query-Sprache, keine Transformations-Sprache. Folgendes geht nicht:
- Werte neu aggregieren (Summe, Average - dafür braucht man jq mit add, length etc.)
- Neue Strukturen bauen
- Joins zwischen mehreren Dokumenten
Für diese Fälle: jq oder direkt in der App-Sprache (JS, Python) verarbeiten.
RFC 9535 - was sich geändert hat
Die IETF-Standardisierung 2024 hat Edge-Cases vereinheitlicht, die früher zwischen Implementierungen unterschiedlich waren - Filter-Syntax, Spalt-Notation, Funktions-Extensions. Neue Libraries sollten RFC 9535 unterstützen; ältere Libraries (jsonpath-plus pre-10.x) verhalten sich oft anders.