Wat is JSONPath?
JSONPath is een querytaal voor JSON-documenten, het JSON-equivalent van XPath voor XML. Stefan Goessner stelde het voor in 2007 als een korte, leesbare manier om naar een knooppunt in een JSON-boom te verwijzen zonder een parser te schrijven. Een expressie begint met de root-selector $ en koppelt eigendomsaccessors, array-subscripts, jokertekens, recursieve afdaling en filtercondities totdat de gewenste knooppunten worden geselecteerd. In 2024 publiceerde de IETF RFC 9535 om de syntaxis te standaardiseren die verdeeld was over implementaties; deze tester draait op jsonpath-plus, een veelgebruikte JavaScript-implementatie die de Goessner-ontwerp, de meeste van RFC 9535 en een paar uitbreidingsoperatoren dekt.
Hoe JSONPath werkt
Een JSONPath-expressie wordt van links naar rechts gelezen en doorloopt een JSON-document stap voor stap. Elke stap neemt de set knooppunten die de vorige stap heeft overleefd en verkleint hem verder. De volledige evaluatiepipeline:
- Verankeren met de root-selector
$. Elke expressie begint hier, gericht op de waarde op het hoogste niveau, of het nu een object of een array is. Kale eigenschapsnamen zonder een voorafgaande$zijn geen geldig JSONPath. - In onderliggende leden lopen met puntnotatie (
$.store.book) of haakjesnotatie ($['store']['book']). Haakjesnotatie is vereist wanneer een sleutel een spatie, een koppelteken of een teken bevat dat geen geldige identifier is. - Elk niveau tegelijk doorzoeken met de recursieve afdaling-operator
... De expressie$..authorverzamelt elkeauthor-waarde overal in de boom, ongeacht diepte. Dit is de operator die JMESPath niet heeft. - Array-elementen per index selecteren (
[0],[-1]voor het laatste item in jsonpath-plus), ze segmenteren met[start:end]-notatie ([0:3]geeft de eerste drie terug), of elk element pakken met het jokerteken[*]. - Elementen filteren met een predicaat binnen
[?(...)]. Binnen het predicaat verwijst@naar het huidige element, dus[?(@.price<10)]behoudt alleen items waarvan het veldpricekleiner is dan 10. Filters combineren met de rest van het pad, zodat je kunt filteren en dan afdalen, of afdalen en dan filteren. - Kies het uitvoerformaat. Waarden geeft de overeenkomende gegevens zelf terug. Paden geeft het JSONPath van elke overeenkomst terug zodat je kunt zien wat de engine heeft opgelost. Pointers geeft de equivalente RFC 6901 JSON Pointer terug voor elke overeenkomst, handig wanneer de downstream-consument JSON Patch of een JSON Schema-validator is.
Waarom deze JSONPath-tester gebruiken?
- Je JSON verlaat de browser nooit. De query wordt uitgevoerd binnen de pagina, zodat productie-fixtures, klant-PII en pre-release API-reacties op je machine blijven.
- De engine is
jsonpath-plus9.x, dezelfde bibliotheek die veel productietestsuites en CI-beweringen ondersteunt. De resultaten die je hier ziet, komen overeen met de resultaten die je buildpipeline zal zien. - Drie uitvoermodi dekken de gebruikelijke downstream-consumenten: rauwe Waarden voor kopiëren en plakken, Paden voor het debuggen van de oplossing van de engine, en RFC 6901 Pointers voor JSON Patch- en JSON Schema-workflows.
- Filterexpressies draaien met
preventEval: true, zodat een geplakte query geen willekeurige JavaScript kan uitvoeren tegen de hostpagina. Dat is van belang wanneer de expressie afkomstig is van een Slack-bericht, een Jira-ticket of het klembord van een collega.
Veelvoorkomende toepassingen van JSONPath
JSONPath duikt op overal waar code een veld uit een JSON-payload moet halen zonder zelf een recursieve afdaling te schrijven:
- Postman-tests: het Tests-tabblad in Postman stelt
pm.response.json()beschikbaar samen met JSONPath-stijlstoegang voor beweringen. Teams schrijven één expressie zoals$.data.user.emailom een veld uit een respons te halen en erover te beweren in CI. - k6-belasttests: k6-scripts roepen
jsonpath()aan binnen eencheck()-blok om waarden uit responsbodies te halen en SLA-drempelwaarden te beweren. Dezelfde expressie die een contract bewees in Postman, kan een belasttest bewaken onder k6. - JSON DSL voor datatransformaties: AWS Step Functions evalueert JSONPath binnen
InputPath,ResultPathenParametersom event-payloads tussen staten te hervormen. Argo Workflows gebruikt JSONPath inwithParamom taken te vertakken over een array. Kuberneteskubectl -o jsonpathgebruikt dezelfde syntaxis om velden te extraheren uit clusterobjecten.
Uitgewerkt voorbeeld
Het canonieke Goessner-fixture is het boekwinkeldocument met vier boeken, elk met category, author, title en price. Tegen dat fixture doorloopt de expressie $.store.book[?(@.price<10)].title drie stappen. Eerst lost $.store.book de array van alle vier boeken op. Vervolgens behoudt het filter [?(@.price<10)] alleen het ene boek dat geprijsd is onder 10 (het item op 8,95). Ten slotte extraheert .title de titel van dat boek. Het resultaat is ["Sayings of the Century"]. Overschakelen naar Paden geeft ["$['store']['book'][0]['title']"] terug, en Pointers geeft ["/store/book/0/title"] terug.
Maak je expressies hier en zet ze rechtstreeks in Postman, k6, kubectl of een Step Functions-toestandsmachine. Plakken, queryen, kopiëren. Niets gaat over het netwerk.
Wat is JSONPath?
JSONPath is een querytaal voor JSON-documenten, analoog aan XPath voor XML. Voorgesteld door Stefan Goessner in 2007 en gestandaardiseerd door de IETF als RFC 9535 in 2024, gebruikt het een compacte expressiesyntaxis die begint met $ (de documentroot) en puntnotatie, array-subscripts, jokertekens, segmenten, recursieve afdaling (..) en filterexpressies ([?(...)]) ondersteunt om knooppunten te selecteren in een JSON-boom.
Hoe verschilt JSONPath van JMESPath of jq?
Alle drie bevragen JSON, maar hun grammatica's en doelen verschillen. JMESPath is de AWS CLI/SDK-standaard: strikter dan JSONPath, geen recursieve afdaling, gebouwd voor voorspelbare projectie zonder neveneffecten. jq is een Turing-complete scripttaal die JSON niet alleen bevraagt maar ook transformeert, reduceert en streamt. JSONPath zit ertussenin: expressiever dan JMESPath dankzij recursieve afdaling en filters, lichter dan jq, en de meest ondersteunde syntaxis in algemene testtools (Postman, Playwright, REST Assured, kubectl, Step Functions). Deze tester implementeert JSONPath.
Welk dialect gebruikt deze tester?
Deze tester draait jsonpath-plus 9.x. Die bibliotheek implementeert de Goessner 2007-specificatie, dekt de meeste van RFC 9535 en voegt uitbreidingsoperatoren toe zoals typecontroles (@.string(), @.number(), @.boolean()) en oudernavigatie (^). De vlag preventEval: true is altijd ingesteld, zodat filterpredicaten via een veilige interpreter worden uitgevoerd in plaats van de ingebouwde JavaScript-eval(). Een geplakte query kan geen willekeurige code uitvoeren tegen deze pagina.
Kan ik individuele overeenkomende waarden kopiëren?
Ja. De knop Naar klembord kopiëren kopieert het volledige resultaatblok als een JSON-array. Om één waarde te pakken, schakel je de uitvoermodus over naar Waarden, selecteer je vervolgens de gewenste regel in het resultaattekstveld en gebruik je de normale kopeersnelkoppeling van je browser (Ctrl/Cmd + C). De uitvoer is platte JSON-tekst, die netjes plakt in een code-editor, een terminal, een Postman-test of een Slack-bericht.