In dit artikel
Wat is JSONPath?
JSONPath is een querytaal voor het extraheren van gegevens uit JSON-documenten. Net als XPath door XML-documenten navigeert, navigeert JSONPath door JSON-structuren met behulp van een beknopte expressiesyntaxis. Het werd geformaliseerd in RFC 9535 (februari 2024) na jaren van informele specificatie.
JSONPath-expressies beginnen met $ (het rootelement) en gebruiken puntnotatie of haakjesnotatie om het document te doorlopen. De taal ondersteunt wildcards, recursieve afdaling, array-slicing en filterexpressies — waardoor het mogelijk is diep geneste waarden te extraheren met een enkele expressie.
JSONPath-syntaxis
JSONPath biedt verschillende operators voor het navigeren en filteren van JSON-structuren.
- Root ($) — elke JSONPath-expressie begint met $ die het rootobject of -array van het JSON-document vertegenwoordigt
- Puntnotatie ($.store.book) — toegang tot onderliggende eigenschappen op naam, vergelijkbaar met JavaScript-objecttoegang. Punten scheiden elk nestingniveau.
- Haakjesnotatie ($['store']['book']) — alternatieve syntaxis met geciteerde eigenschapsnamen tussen haakjes. Vereist wanneer eigenschapsnamen speciale tekens of spaties bevatten.
- Wildcard (*) — komt overeen met alle elementen op het huidige niveau. $.store.* geeft alle directe kinderen van store terug; $[*] geeft alle elementen van een root-array terug.
- Recursieve afdaling (..) — doorzoekt alle afstammelingen op elke diepte. $..price vindt elk 'price'-veld overal in het document, ongeacht het nestingniveau.
- Array-slices ([begin:einde:stap]) — selecteer een reeks array-elementen. $[0:3] geeft de eerste drie elementen terug; $[-2:] geeft de laatste twee terug; $[::2] geeft elk ander element terug.
JSONPath-expressievoorbeelden
Hier zijn praktische voorbeelden die laten zien hoe JSONPath-expressies gegevens extraheren uit echte JSON-structuren.
- Geneste waarden extraheren — $.users[0].name haalt de naam van de eerste gebruiker op. $.config.database.host krijgt een diep geneste configuratiewaarde.
- Arrays filteren — $.users[?(@.age > 18)] geeft alle gebruikers ouder dan 18 terug. $.products[?(@.price < 50)] vindt betaalbare producten. Filters gebruiken @ om naar het huidige element te verwijzen.
- Meerniveauquery's — $..author geeft elk auteurveld op elke diepte terug. $.store.book[*].title geeft alle boektitels terug. $.orders[*].items[*].sku extraheert SKU's in alle bestellingen en items.
Deze expressies kunnen worden gecombineerd om krachtige query's te maken. Bijvoorbeeld, $.store.book[?(@.price < 10)].title geeft titels terug van alle boeken goedkoper dan 10.
Probeer gratis — geen aanmelding vereist
JSONPath-expressies testen →Veelvoorkomende gebruiksscenario's
JSONPath wordt gebruikt overal waar gestructureerde gegevens moeten worden bevraagd of geëxtraheerd uit JSON-documenten.
- API-responsextractie — haal specifieke velden op uit complexe API-reacties zonder aangepaste parseercode te schrijven. Test expressies op voorbeeldreacties voordat u gaat coderen.
- Configuratieparsering — extraheer waarden uit JSON-configuratiebestanden in CI/CD-pipelines, implementatiescripts en infrastructure-as-code-tools
- Loganalyse — vraag gestructureerde JSON-logboeken op om specifieke gebeurtenissen, foutpatronen of prestatiemetrieken te vinden in grote logbestanden
- Gegevenstransformatie — gebruik JSONPath in ETL-pipelines om JSON-gegevens te selecteren, filteren en hervormen tijdens import-/exportbewerkingen
JSONPath vs JQ vs JMESPath
Verschillende querytalen richten zich op JSON-documenten. Elk heeft verschillende sterke punten en ecosysteemondersteuning.
- JSONPath — standaard querysyntaxis (RFC 9535), breed ondersteund in programmeerbibliotheken (Java, Python, JavaScript, PHP). Het beste voor eenvoudige extractie en filtering. Geen ingebouwde transformatie.
- JQ — opdrachtregel-JSON-processor met een krachtige functionele taal. Ondersteunt transformatie, berekening en opmaak van uitvoer. Het beste voor shell-scripting en opdrachtregelgegevensverwerking.
- JMESPath — querytaal gebruikt door AWS CLI en Boto3. Strengere syntaxis dan JSONPath met ingebouwde functies. Het beste voor AWS-ecosysteemintegratie en programmatisch bevragen.
Veelgestelde vragen
Gebruikt JSONPath nulgebaseerde of op-één-gebaseerde array-indexering?
JSONPath gebruikt nulgebaseerde array-indexering, consistent met de meeste programmeertalen. $[0] geeft het eerste element terug, $[1] het tweede, enzovoort. Negatieve indices tellen vanaf het einde: $[-1] geeft het laatste element terug, $[-2] het op één na laatste.
Hoe werken filterexpressies in JSONPath?
Filterexpressies gebruiken de syntaxis [?(expressie)] waarbij @ verwijst naar het huidige element dat wordt geëvalueerd. U kunt vergelijkingsoperatoren (==, !=, <, >, <=, >=), logische operatoren (&& en ||) en eigenschapstoegang (bijv. @.name) gebruiken. Voorbeeld: $[?(@.status == 'active')] geeft elementen terug waarbij status gelijk is aan 'active'.
Zijn alle JSONPath-implementaties compatibel?
Niet volledig. Vóór RFC 9535 (2024) had JSONPath geen formele standaard en varieerden implementaties. Veelvoorkomende verschillen zijn syntaxis van filterexpressies, gedrag van recursieve afdaling en verwerking van ontbrekende eigenschappen. RFC 9535 beoogt gedrag te standaardiseren, maar oudere bibliotheken kunnen nog steeds andere conventies volgen. Test expressies altijd op uw specifieke implementatie.