← Zurück zum Blog

JSON-Pfade finden: Leitfaden für JSONPath und Abfragen

Meistern Sie JSONPath: Finden Sie beliebige Werte in JSON-Strukturen. Syntax, Beispiele, Tools und praktische Anwendungen.

Big JSON Team11 Min. Lesezeittools
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

11 Min. Lesezeit

# JSON-Pfade finden: JSONPath Leitfaden

Lernen Sie, wie Sie effizient Werte in JSON-Strukturen finden und extrahieren.

Was ist JSONPath?

JSONPath ist eine Abfragesprache für JSON, ähnlich wie XPath für XML. Sie ermöglicht es, spezifische Werte in verschachtelten JSON-Strukturen zu finden.

Beispiel-JSON

{

"shop": {

"buecher": [

{

"kategorie": "programmierung",

"autor": "Max Mustermann",

"titel": "JSON lernen",

"preis": 29.99

},

{

"kategorie": "design",

"autor": "Anna Schmidt",

"titel": "Webdesign Basics",

"preis": 24.99

}

]

}

}

Grundlegende Syntax

Root-Element ($)

$ // Ganzes Dokument

Punkt-Notation

$.shop.buecher

// Gibt das Array zurück

$.shop.buecher[0].titel

// "JSON lernen"

Bracket-Notation

$['shop']['buecher'][0]['titel']

// "JSON lernen"

Array-Zugriff

Index

$.shop.buecher[0]

// Erstes Buch

$.shop.buecher[1].autor

// "Anna Schmidt"

Alle Elemente ()

$.shop.buecher[].titel

// ["JSON lernen", "Webdesign Basics"]

$.shop.buecher[].preis

// [29.99, 24.99]

Slice

$.shop.buecher[0:2]

// Erste 2 Bücher

$.shop.buecher[-1]

// Letztes Buch

Filterausdrücke

Einfacher Filter

$.shop.buecher[?(@.preis < 30)]

// Alle Bücher unter 30€

$.shop.buecher[?(@.kategorie == "programmierung")]

// Alle Programmier-Bücher

Komplexe Filter

$.shop.buecher[?(@.preis < 30 && @.kategorie == "programmierung")]

// Programmier-Bücher unter 30€

$.shop.buecher[?(@.autor =~ /Schmidt/i)]

// Bücher von Autoren mit "Schmidt" im Namen

Rekursive Suche

Doppelter Punkt (..)

$..titel

// Findet "titel" überall

$..preis

// Findet alle Preise

Beispiel:
{

"firma": {

"abteilungen": [

{

"name": "IT",

"mitarbeiter": [

{"name": "Max", "gehalt": 50000}

]

}

]

}

}

$..name

// ["IT", "Max"]

$..gehalt

// [50000]

Praktische Beispiele

Beispiel 1: API-Antwort durchsuchen

{

"benutzer": [

{

"id": 1,

"name": "Max",

"email": "max@example.de",

"aktiv": true

},

{

"id": 2,

"name": "Anna",

"email": "anna@example.de",

"aktiv": false

}

]

}

Abfragen:
// Alle aktiven Benutzer

$.benutzer[?(@.aktiv == true)]

// Emails aller Benutzer

$.benutzer[].email

// Namen von inaktiven Benutzern

$.benutzer[?(@.aktiv == false)].name

Beispiel 2: Verschachtelte Daten

{

"firma": {

"standorte": [

{

"stadt": "Berlin",

"mitarbeiter": [

{"name": "Max", "position": "Developer"},

{"name": "Anna", "position": "Designer"}

]

},

{

"stadt": "München",

"mitarbeiter": [

{"name": "Tom", "position": "Manager"}

]

}

]

}

}

Abfragen:
// Alle Mitarbeiter-Namen

$..mitarbeiter[].name

// ["Max", "Anna", "Tom"]

// Developer finden

$..mitarbeiter[?(@.position == "Developer")].name

// ["Max"]

// Alle Städte

$.firma.standorte[].stadt

// ["Berlin", "München"]

Tools und Bibliotheken

JavaScript (jsonpath)

const jp = require('jsonpath');

const daten = {

benutzer: [

{name: "Max", alter: 30},

{name: "Anna", alter: 25}

]

};

// Pfad abfragen

const result = jp.query(daten, '$.benutzer[].name');

console.log(result); // ["Max", "Anna"]

// Mit Filter

const erwachsene = jp.query(daten, '$.benutzer[?(@.alter >= 18)]');

Python (jsonpath-ng)

from jsonpath_ng import jsonpath, parse

daten = {

"benutzer": [

{"name": "Max", "alter": 30},

{"name": "Anna", "alter": 25}

]

}

# Pfad parsen

path = parse('$.benutzer[].name')

# Matches finden

matches = path.find(daten)

namen = [match.value for match in matches]

print(namen) # ['Max', 'Anna']

Online-Tools

Big JSON:
  • Interaktiver Pfad-Finder
  • Klick-Navigation
  • Pfad-Kopieren

JSONPath Online Evaluator:
  • jsonpath.com
  • Echtzeit-Testing
  • Beispiele

jq - Kommandozeilen-Tool

Installation

# Linux

sudo apt-get install jq

# macOS

brew install jq

# Windows

choco install jq

Grundlegende Verwendung

# Ganzes JSON formatieren

jq '.' datei.json

# Feld extrahieren

jq '.shop.buecher[0].titel' datei.json

# Alle Titel

jq '.shop.buecher[].titel' datei.json

# Filter

jq '.shop.buecher[] | select(.preis < 30)' datei.json

Erweiterte jq-Beispiele

# Array von Titeln erstellen

jq '[.shop.buecher[].titel]' datei.json

# Objekte transformieren

jq '.shop.buecher[] | {titel: .titel, autor: .autor}' datei.json

# Sortieren

jq '.shop.buecher | sort_by(.preis)' datei.json

# Durchschnittspreis

jq '[.shop.buecher[].preis] | add / length' datei.json

Best Practices

1. Spezifisch sein

// ✅ Gut - Spezifisch

$.benutzer[0].name

// ⚠️ Weniger effizient - Rekursiv

$..name

2. Filter verwenden statt manuell suchen

// ✅ Gut

$.benutzer[?(@.aktiv == true)]

// ❌ Schlecht - manuell filtern nach Abfrage

$.benutzer[]

3. Pfade dokumentieren

// Dokumentieren Sie komplexe Pfade

const ACTIVE_USERS_PATH = '$.benutzer[?(@.aktiv == true)]';

const result = jp.query(daten, ACTIVE_USERS_PATH);

Debugging

Schritt für Schritt testen

// 1. Root

$

// 2. Erste Ebene

$.shop

// 3. Array

$.shop.buecher

// 4. Spezifisches Element

$.shop.buecher[0]

// 5. Feld

$.shop.buecher[0].titel

Existenz prüfen

const jp = require('jsonpath');

const pfadExistiert = (daten, pfad) => {

const result = jp.query(daten, pfad);

return result.length > 0;

};

if (pfadExistiert(daten, '$.shop.buecher[0]')) {

console.log('Pfad existiert');

}

Häufige Anwendungsfälle

1. API-Responses durchsuchen

// Alle Fehler finden

$..errors[]

// Erfolgreiche Datensätze

$.data[?(@.status == "success")]

2. Konfigurationsdateien abfragen

// Server-Port finden

$.config.server.port

// Alle Umgebungsvariablen

$.config.env.

3. Testdaten extrahieren

// Alle IDs für Tests

$.benutzer[].id

// Testbenutzer

$.benutzer[?(@.name =~ /test/i)]

Zusammenfassung

Wichtigste Operatoren

| Operator | Bedeutung | Beispiel |

|----------|-----------|----------|

| $ | Root | $ |

| . | Feld | $.name |

| [] | Array-Index | $[0] |

| [] | Alle Elemente | $[].name |

| .. | Rekursiv | $..name |

| ?() | Filter | $[?(@.price < 10)] |

Checkliste

✅ Verwenden Sie spezifische Pfade

✅ Testen Sie Pfade schrittweise

✅ Nutzen Sie Filter für Bedingungen

✅ Dokumentieren Sie komplexe Abfragen

✅ Validieren Sie Existenz vor Zugriff

Weiterführende Ressourcen

Share:

Verwandte Artikel

Read in English