Vad är JSONPath?

JSONPath är ett frågespråk för JSON, på samma sätt som XPath fungerar för XML. Det låter dig navigera och extrahera data från en JSON-struktur med hjälp av sökvägsuttryck. Ett JSONPath-uttryck börjar med $, som representerar dokumentets rot, och använder punktnotation (.key) eller hakparentesnotation (['key']) för att traversera objekt, och [index] för att komma åt arrayelement.

JSONPath beskrevs ursprungligen av Stefan Gössner 2007 och har sedan dess blivit en allmänt använd standard i API:er, testramverk och databelhandlingspipelines. Det stöds i många språk och verktyg, inklusive JavaScript, Python, Java och databaser som PostgreSQL och MySQL.

Verktygsöversikt

Det här verktyget låter dig klistra in ett giltigt JSON-dokument och skriva ett JSONPath-uttryck för att fråga det. Resultaten visas direkt när du skriver och visar alla matchande värden som en formaterad JSON-array. Antalet matchningar visas separat så att du snabbt kan verifiera hur många noder som valdes.

Exempel

Inmatnings-JSON:

{
  "store": {
    "book": [
      { "title": "Moby Dick", "price": 8.99, "category": "fiction" },
      { "title": "War and Peace", "price": 12.5, "category": "fiction" },
      {
        "title": "A Brief History of Time",
        "price": 7.99,
        "category": "science"
      }
    ]
  }
}
Uttryck Resultat
$.store.book[*].title Alla bokstitlar
$.store.book[0] Första bokobjekt
$.store.book[?(@.price < 10)] Böcker billigare än $10
$.store.book[?(@.category == "fiction")] Endast skönlitteraturböcker
$..price Alla prisvärden var som helst i dokumentet

Funktioner

  • Realtidsutvärdering — resultaten uppdateras när du skriver uttrycket eller redigerar JSON
  • Visar antalet matchningar i ett dedikerat fält
  • Kopieringsknapp på uttrycksfältet för snabb återanvändning

Hur det fungerar

JSONPath-uttryck utvärderas mot den parsade JSON med hjälp av biblioteket jsonpath-plus. Symbolen $ refererar till rotelementet. Underordnade noder nås med . eller [], jokertecken med *, rekursiv nedstigning med .. och filter med [?(...)]. Resultatet är alltid en array med matchande värden, även om endast en matchning hittas.

Alternativ förklarade

Syntax Betydelse
$ Rotelementet
.key eller ['key'] Underordnad egenskap
[*] Alla arrayelement
[0] Första arrayelement (nollindexerat)
[-1] Sista arrayelement
[0,2] Element vid index 0 och 2
[0:2] Element från index 0 till 1 (sekvens)
..key Rekursiv nedstigning — hitta key på vilket djup som helst
[?(@.price > 5)] Filter — element där price är större än 5
@ Aktuell nod (används i filteruttryck)

Tips

  • Använd $..* för att få varje enskilt värde i hela dokumentet — användbart för att utforska okända JSON-strukturer.
  • Filteruttryck stöder jämförelser (==, !=, <, >, <=, >=) och kan referera till kapslade egenskaper: [?(@.author.name == "Rees")].
  • För att matcha en egenskap oavsett dess djup använder du .. rekursiv nedstigning: $..title hittar alla title-fält var som helst i dokumentet.