JSON mit Ausdrücken im JSONPath-Stil abfragen
Lesen Sie Werte mit einem kurzen Pfad aus einem Datendokument: $.store.books[*].title liefert North und South, einen Titel pro Buch, in der Reihenfolge des Dokuments. Ein Pfad ohne Treffer ergibt eine leere Liste, keinen Fehler. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Rechenbeispiel
- Pfad
- $.store.books[*].title
- Übereinstimmungen
- North, South
Die unterstützte Syntax umfasst direkte Eigenschaften, in Anführungszeichen gesetzte Eigenschaften, Array-Indizes und Platzhalter. Filter, rekursiver Abstieg, Bereiche, Vereinigungen und ausführbare Ausdrücke werden bewusst abgelehnt. Dieser enge Vertrag sorgt bei Fehlersuche, Tests, Datenprüfung und leichter Automatisierung für vorhersehbare Ergebnisse.
Erstellen Sie einen Pfad vom Anfang des Dokuments
Jeder Ausdruck beginnt mit <code>$</code>; dieses Zeichen steht für das vollständig eingelesene Dokument. Fügen Sie einen Punkt und einen einfachen Eigenschaftsnamen wie <code>$.customer.name</code> hinzu, um durch Objekte zu navigieren. Bei der Punktnotation muss ein Name mit einem Buchstaben oder Unterstrich beginnen und darf danach Buchstaben, Ziffern oder Unterstriche enthalten.
Enthält ein Schlüssel ein Leerzeichen, einen Bindestrich, einen Punkt oder ein anderes nicht passendes Zeichen, verwenden Sie einen in Anführungszeichen gesetzten Klammernschritt, etwa <code>$['display-name']</code> oder <code>$["shipping address"]</code>. Sowohl einfache als auch doppelte Anführungszeichen sind zulässig; das jeweilige Anführungszeichen und ein Rückstrich lassen sich maskieren. Pfade werden von links nach rechts ausgewertet.
Eine fehlende Eigenschaft liefert für den betreffenden Zweig keinen Wert. Die Antwort enthält stets ein <code>matches</code>-Array, auch wenn der Pfad nur einen Skalar bezeichnet. Dadurch können Sie einzelne Treffer, Platzhalterergebnisse und leere Ergebnisse mit derselben Ausgabeform verarbeiten.
Wählen Sie Array-Einträge und erweitern Sie Platzhalter
Mit einer nicht negativen Ganzzahl in Klammern wählen Sie eine Array-Position aus, beispielsweise <code>$.orders[0].id</code>. Indizes beginnen bei null. Das erste Element hat daher den Index null, während ein Index jenseits der Array-Länge keinen Treffer ergibt.
Mit <code>[*]</code> erweitern Sie alle Elemente; anschließend können Sie den Pfad fortsetzen und ein Feld jedes Elements lesen. So liefert <code>$.store.books[*].title</code> den Titel jedes Buchobjekts, das diese Eigenschaft besitzt. Auch die Punktform <code>.*</code> wird unterstützt.
Platzhalter lassen sich mit nachfolgenden Eigenschafts- oder Indexschritten kombinieren. Nicht passende Zweige werden verworfen, ohne andere Treffer zu beeinflussen. Die endgültige Reihenfolge folgt somit dem Quelldokument und dem Ablauf der Navigation.
Erkennen Sie die bewusst nicht unterstützte Syntax
Diese Fähigkeit implementiert eine kleine Sprache im JSONPath-Stil und nicht jeden verfügbaren Dialekt. Rekursiver Abstieg wie <code>$..name</code>, Filter wie <code>$[?( @.price < 10)]</code>, Bereiche, Vereinigungen, negative Indizes, Skriptausdrücke und Funktionen werden abgelehnt.
Das ist beabsichtigt, weil sich diese Merkmale zwischen Bibliotheken unterscheiden und teilweise Auswertungen erlauben, die nicht zu einem deterministischen Parser passen. Findet ein syntaktisch gültiger Pfad hingegen nichts, ist das kein Fehler: Das Ergebnis ist ein leeres <code>matches</code>-Array. Ihre Automatisierung kann dadurch fehlerhafte Anweisungen von gültigen Abfragen nach fehlenden optionalen Daten unterscheiden.
Prüfen Sie Pfade während der Entwicklung, bleiben Sie beim dokumentierten Teilumfang und legen Sie fest, ob eine leere Treffermenge in Ihrem Ablauf zulässig ist.
Häufige Fragen
Welche JSONPath-Funktionen werden unterstützt?
Der Teilumfang umfasst das Wurzelsymbol, Punkteigenschaften, zitierte Klammereigenschaften, nicht negative Array-Indizes und Platzhalter.
Was geschieht, wenn ein Pfad keine Treffer hat?
Die Anfrage gelingt und gibt ein leeres matches-Array zurück. Fehlende Daten sind nicht dasselbe wie ungültige Pfadsyntax.
Kann ich Filter oder rekursiven Abstieg verwenden?
Nein. Filter, rekursiver Abstieg, Bereiche, Vereinigungen, Skripte, Funktionen und negative Indizes werden abgelehnt.
Wie lese ich einen Schlüssel mit Leerzeichen oder Bindestrich?
Setzen Sie den Namen in Anführungszeichen in eckige Klammern, etwa $['display-name'] oder $["shipping address"]. Der einfache Punkt passt nur zu Namen, die mit einem Buchstaben oder Unterstrich beginnen und aus Buchstaben, Ziffern oder Unterstrichen bestehen.
Beginnen Listenpositionen bei 0 oder bei 1?
Bei 0: $.orders[0].id liest die erste Bestellung. Eine Position hinter dem Listenende ergibt keinen Treffer, aber auch keinen Fehler, und negative Positionen werden nicht angenommen.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/dev2/json-path-query \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"json":"{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}","path":"$.store.books[*].title"}'const res = await fetch("https://api.kit.forhosting.com/dev2/json-path-query", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/json-path-query",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/json-path-query", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"json":"{\\"store\\":{\\"books\\":[{\\"title\\":\\"North\\",\\"price\\":12},{\\"title\\":\\"South\\",\\"price\\":18}]}}","path":"$.store.books[*].title"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"json":"{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}","path":"$.store.books[*].title"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/json-path-query", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.json_path_query",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Mit diesem Abfragewerkzeug im JSONPath-Stil extrahieren Sie Werte aus einem JSON-Dokument, ohne ein Skript schreiben, Abhängigkeiten installieren oder eine Befehlszeile einrichten zu müssen. Fügen Sie gültiges JSON ein, geben Sie einen mit dem Wurzelsymbol beginnenden Pfad an und Sie erhalten eine geordnete Trefferliste.
Erstellen Sie einen Pfad von der JSON-Wurzel aus
Der Wurzelausdruck allein ist gültig und gibt den gesamten JSON-Wert als einzigen Treffer zurück.
Wählen Sie Array-Einträge und erweitern Sie Platzhalter
Bei einem Objekt besucht ein Platzhalter die Werte in der üblichen JSON-Eigenschaftsreihenfolge, bei einem Array vom ersten bis zum letzten Element. Werte behalten ihren nativen JSON-Typ: Zeichenketten, Zahlen, Objekte, Arrays, boolesche Werte und null werden ohne Umwandlung zurückgegeben.
Erkennen Sie die bewusst nicht unterstützte Syntax
Ein nicht unterstützter Ausdruck erzeugt einen Fehler <code>invalid_input</code> mit einer Nachricht zum Syntaxproblem; er wird niemals als teilweise gültiger Pfad behandelt. Ungültiges JSON wird bereits vor der Navigation separat abgelehnt. Der API-Preis beginnt bei $0.002 pro Anfrage; im Browser steht dieselbe deterministische Logik bereit.
Integrationsbeispiele
Eine API-Antwort untersuchen
Extrahieren Sie beim Debuggen einen tief verschachtelten Status, Bezeichner oder eine Liste von Werten aus der Antwort.
Stabile Testprüfungen erstellen
Wählen Sie nur die für einen Regressionstest benötigten Felder aus, statt ein vollständiges veränderliches Dokument zu vergleichen.
Leichte Automatisierung vorbereiten
Entnehmen Sie Werte aus Konfigurations-, Webhook- oder Export-JSON, bevor Sie sie an den nächsten deterministischen Schritt übergeben.
Technische Fragen
Werden gefundene Werte in Text umgewandelt?
Nein. Sie behalten ihren JSON-Typ, darunter Zahlen, boolesche Werte, null, Objekte und Arrays.
Was kostet eine API-Anfrage?
Der API-Preis beginnt bei $0.002 pro Anfrage. Diese Fähigkeit kann außerdem kostenlos im Browser ausgeführt werden.