json-formatieren.de

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.

Foto von Mateusz Viola

Von Mateusz Viola

Betreiber & redaktionelle Verantwortung json-formatieren.de

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

OperatorBedeutungBeispiel
$Root-Element$
.fieldChild-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 }
    ]
  }
}
QueryBedeutung
$.store.book[*].authorAlle Autoren
$..authorAlle 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:

AspektJSONPathjq
StandardRFC 9535 (2024)de-facto, kein Standard
Sprachenur QueryQuery + Transformationen
Mächtigkeitmittelhoch (komplette Sprache)
Browser-Nutzungdirekt via JS-LibraryWASM-Variante, schwerer
CLIjp (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

  1. Postman-Tests: Postman-CLI nutzt JSONPath für Response-Assertions
  2. Splunk: spath-Command in der Splunk-Search-Language verwendet JSONPath-Syntax
  3. Kubernetes kubectl: kubectl get pods -o jsonpath='{.items[*].metadata.name}'
  4. Azure-CLI / Bicep: für ARM-Output-Extraction
  5. 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.

Mehr zum Thema