ToolDeck

JSONPath Tester

Test JSONPath-expressies op JSON-data en bekijk overeenkomende resultaten

Probeer een voorbeeld

JSON-invoer

Resultaten

Draait lokaal · Veilig om secrets te plakken
Resultaten verschijnen hier…

Wat is JSONPath?

JSONPath is een querytaal voor het extraheren van waarden uit JSON-documenten. Oorspronkelijk voorgesteld door Stefan Goessner in 2007 als equivalent van XPath voor XML, stelt JSONPath je in staat expressies te schrijven zoals $.store.book[*].author om alle auteurvelden in een book-array te selecteren zonder lussen of handmatige traversalcode. De taal werd in februari 2024 gestandaardiseerd als RFC 9535, gepubliceerd door de IETF.

Een JSONPath-expressie begint altijd met $ voor de root van het document. Vanaf daar koppel je selectors: puntnotatie voor objectsleutels, haakjesnotatie voor array-indices, wildcards voor alle kinderen en de recursieve afdaaloperator (..) om door elk nestniveau te zoeken. Filterexpressies zoals [?(@.price < 10)] laten je elementen selecteren op basis van voorwaarden die worden geëvalueerd ten opzichte van hun waarden.

JSONPath wordt gebruikt in API-testtools zoals Postman, observabiliteitsplatformen zoals Datadog en Splunk, workflow-engines zoals Apache NiFi en programmeerbibliotheken voor JavaScript, Python, Go, Java en C#. Door je expressies te testen tegen echte data voordat je ze in code of configuratiebestanden opneemt, voorkom je stille fouten wanneer de JSON-structuur niet overeenkomt met je aannames.

Waarom deze JSONPath Tester gebruiken?

JSONPath-expressies handmatig schrijven is foutgevoelig. Een ontbrekende punt, verkeerd haakjestype of onjuiste filtersyntaxis kan lege resultaten opleveren zonder foutmelding. Dit hulpmiddel geeft je directe visuele feedback over wat je expressie overeenkomt.

Directe resultaten
Plak JSON, typ een expressie en zie de overeenkomende waarden in realtime bijwerken. Je hoeft geen script uit te voeren of een pagina te herladen om je query te controleren.
🔒
Privacy-first
Alle evaluatie vindt in je browser plaats. Je JSON-data verlaat je computer nooit, zodat je expressies veilig kunt testen tegen productie-API-responsen of configuratiebestanden met inloggegevens.
📋
Resultaten direct kopiëren
Kopieer overeenkomende uitvoer als JSON met één klik. Plak het in testbeweringen, documentatie of API-responsvoorbeelden zonder opnieuw te formatteren.
🛠️
Geen installatie vereist
Geen npm-pakketten te installeren, geen Python-virtualenvs aan te maken. Open de pagina, plak je data en begin met queryen. Werkt op elk apparaat met een browser.

JSONPath-toepassingen

Frontend-ontwikkeling
Extraheer de exacte geneste waarden die je nodig hebt uit API-responsen voordat je ze koppelt aan React-state of Vue-berekende eigenschappen. Test je padexpressies eerst tegen de echte API-payload.
Backend API-testen
Postman en REST-assured gebruiken JSONPath om responslichamen te valideren. Bouw en verifieer je beweringsexpressies hier voordat je ze in testscripts kopieert, wat foutopsporingscycli vermindert.
DevOps-configuratie
Kubernetes custom resource definitions, AWS Step Functions en Terraform-gegevensbronnen accepteren JSONPath-expressies om waarden te extraheren uit JSON-uitvoer. Valideer je pad voordat je implementeert.
QA-testautomatisering
Schrijf JSONPath-gebaseerde beweringen voor contracttests en integratietests. Verifieer dat je expressies de verwachte waarden correct matchen wanneer de JSON-structuur optionele of nullable velden bevat.
Data-pipeline-extractie
Apache NiFi, Logstash en aangepaste ETL-scripts gebruiken JSONPath om velden te extraheren uit semi-gestructureerde logdata en event streams. Test expressies tegen voorbeeldpayloads vóór pipeline-implementatie.
Leren en experimenteren
Studenten en ontwikkelaars die nieuw zijn met JSONPath kunnen verschillende expressies proberen tegen voorbeeld-JSON om te begrijpen hoe wildcards, recursieve afdaling en filters werken zonder een lokale omgeving.

JSONPath-syntaxisreferentie

RFC 9535 definieert de standaard JSONPath-syntaxis. De onderstaande tabel behandelt de operators die je in de meeste queries zult gebruiken. Alle expressies beginnen met $ (het rootknooppunt) en koppelen een of meer selectors om door de documentstructuur te navigeren.

OperatorBeschrijvingVoorbeeld
$Root element$.store
.keyChild property$.store.book
[n]Array index (zero-based)$.store.book[0]
[*]All elements in array/object$.store.book[*]
..Recursive descent$..author
[start:end]Array slice$.store.book[0:2]
[?()]Filter expression$.store.book[?(@.price<10)]
@Current node (inside filter)$.store.book[?(@.isbn)]

JSONPath vs jq vs XPath

JSONPath, jq en XPath lossen hetzelfde probleem op (gestructureerde data queryen) voor verschillende formaten en toepassingen. JSONPath richt zich op JSON en is beschikbaar als bibliotheek in de meeste talen. jq is een zelfstandige CLI-tool met zijn eigen Turing-complete filtertaal. XPath werkt op XML en maakt deel uit van de W3C-specificatiestack.

FunctieJSONPathjqXPath
GegevensformaatJSONJSONXML
Toegang tot eerste element$.store.book[0].store.book[0]/store/book[1]
Recursief zoeken$..price.. | .price?//price
Filterexpressie[?(@.price<10)]select(.price < 10)[price<10]
SpecificatieRFC 9535stedolan.github.ioW3C XPath 3.1

Codevoorbeelden

Hoe JSONPath-expressies te evalueren in populaire talen en tools. Elk voorbeeld gebruikt dezelfde boekwinkel-JSON-structuur voor vergelijking.

JavaScript (jsonpath-plus)
import { JSONPath } from 'jsonpath-plus';

const data = {
  store: {
    book: [
      { title: 'Moby Dick', price: 8.99 },
      { title: 'The Great Gatsby', price: 12.99 }
    ]
  }
};

// Get all book titles
JSONPath({ path: '$.store.book[*].title', json: data });
// → ['Moby Dick', 'The Great Gatsby']

// Recursive descent — find every price in the document
JSONPath({ path: '$..price', json: data });
// → [8.99, 12.99]

// Filter — books under $10
JSONPath({ path: '$.store.book[?(@.price < 10)]', json: data });
// → [{ title: 'Moby Dick', price: 8.99 }]
Python (jsonpath-ng)
from jsonpath_ng.ext import parse
import json

data = {
    "store": {
        "book": [
            {"title": "Moby Dick", "price": 8.99},
            {"title": "The Great Gatsby", "price": 12.99}
        ]
    }
}

# Get all book titles
expr = parse("$.store.book[*].title")
titles = [match.value for match in expr.find(data)]
# → ['Moby Dick', 'The Great Gatsby']

# Recursive descent — all prices
expr = parse("$..price")
prices = [match.value for match in expr.find(data)]
# → [8.99, 12.99]

# Filter — books under $10
expr = parse("$.store.book[?price < 10]")
cheap = [match.value for match in expr.find(data)]
# → [{"title": "Moby Dick", "price": 8.99}]
Go (ohler55/ojg)
package main

import (
    "fmt"
    "github.com/ohler55/ojg/jp"
    "github.com/ohler55/ojg/oj"
)

func main() {
    src := `{
        "store": {
            "book": [
                {"title": "Moby Dick", "price": 8.99},
                {"title": "The Great Gatsby", "price": 12.99}
            ]
        }
    }`

    obj, _ := oj.ParseString(src)

    // Get all book titles
    expr, _ := jp.ParseString("$.store.book[*].title")
    results := expr.Get(obj)
    fmt.Println(results)
    // → [Moby Dick The Great Gatsby]

    // Recursive descent — all prices
    expr2, _ := jp.ParseString("$..price")
    fmt.Println(expr2.Get(obj))
    // → [8.99 12.99]
}
CLI (jq alternative syntax)
# jq uses its own syntax, not JSONPath, but solves the same problem.
# Mapping common JSONPath patterns to jq:

# $.store.book[*].title → get all titles
echo '{"store":{"book":[{"title":"Moby Dick"},{"title":"Gatsby"}]}}' | \
  jq '.store.book[].title'
# → "Moby Dick"
# → "Gatsby"

# $..price → recursive descent for "price" keys
echo '{"a":{"price":1},"b":{"price":2}}' | \
  jq '.. | .price? // empty'
# → 1
# → 2

# Filter: books where price < 10
echo '{"store":{"book":[{"title":"A","price":8},{"title":"B","price":12}]}}' | \
  jq '.store.book[] | select(.price < 10)'
# → {"title":"A","price":8}

Veelgestelde vragen

Wat is het verschil tussen JSONPath en jq?
JSONPath is een querytaal ontworpen om als bibliotheek in applicaties te worden ingesloten. Het retourneert overeenkomende waarden uit een JSON-document met behulp van padexpressies. jq is een zelfstandige commandoregeltool met een volledige programmeertaal voor het transformeren van JSON, inclusief conditionals, functies en stringinterpolatie. Gebruik JSONPath wanneer je een query in code of een tool zoals Postman nodig hebt. Gebruik jq voor ad-hoc commandoregelgegevenstransformatie.
Is JSONPath een officiële standaard?
Ja. De IETF publiceerde RFC 9535 ("JSONPath: Query Expressions for JSON") in februari 2024. Daarvoor bestond JSONPath alleen als informele specificatie van Stefan Goessner uit 2007, wat leidde tot inconsistenties tussen implementaties. RFC 9535 definieert de syntaxis, semantiek en een normalisatieformaat voor interoperabiliteit.
Hoe werkt recursieve afdaling (..) in JSONPath?
De recursieve afdaaloperator (..) doorzoekt elk niveau van het JSON-document naar de sleutel die erop volgt. Zo retourneert $..price alle waarden die zijn gekoppeld aan de sleutel "price", ongeacht hoe diep ze zijn genest. Het is equivalent aan een diepte-eerst doorloop die overeenkomende knooppunten verzamelt. Houd er rekening mee dat recursieve afdaling op grote documenten veel resultaten kan opleveren en mogelijk trager is dan een direct pad.
Kan JSONPath JSON-data wijzigen?
Nee. JSONPath is een alleen-lezen querytaal. Het selecteert en retourneert waarden maar kan geen knooppunten invoegen, bijwerken of verwijderen. Om JSON te wijzigen op basis van een JSONPath-expressie moet je de JSON-manipulatiefuncties van je programmeertaal gebruiken na het queryen. Sommige bibliotheken zoals jsonpath-ng in Python bieden een set()-methode op overeenkomstobjecten, maar dit is een bibliotheekextensie, geen deel van de JSONPath-specificatie.
Wat betekent het @-symbool in JSONPath-filterexpressies?
Het @-symbool verwijst naar het huidige knooppunt dat wordt geëvalueerd in een filterexpressie. In $.store.book[?(@.price < 10)] itereert het filter over elk element van de book-array en vertegenwoordigt @ elk boekobject op zijn beurt. @.price heeft toegang tot het price-veld van het huidige boek. Zonder @ zou het filter niet weten welke eigenschappen van welk knooppunt het moet controleren.
Hoe ga ik om met sleutels met speciale tekens of spaties in JSONPath?
Gebruik haakjesnotatie met aanhalingstekens: $['store']['book title']. Haakjesnotatie werkt voor elke sleutel, inclusief die met punten, spaties of Unicode-tekens. Puntnotatie ($.store.key) werkt alleen voor sleutels die geldige identifiers zijn (letters, cijfers, underscores). RFC 9535 vereist dat implementaties zowel enkelvoudig als dubbelgeciteerde haakjesnotatie ondersteunen.
Waarom retourneert mijn JSONPath-expressie lege resultaten?
De meest voorkomende oorzaken zijn: een typefout in een sleutelnaam (JSONPath is hoofdlettergevoelig), het gebruik van puntnotatie voor een sleutel met speciale tekens, het ontbreken van het $-rootsymbool aan het begin of de aanname dat een waarde een array is terwijl het een enkel object is. Plak je JSON in een testertool en probeer eerst eenvoudigere subexpressies (zoals $.store) om te verifiëren dat elk segment van je pad correct wordt opgelost voordat je meer selectors toevoegt.