Poizvedovanje po JSON z JPath
V dokumentu po poti poiščete vozlišča in vrednosti, elemente polja filtrirate po njihovih vrednostih in iščete v poljubni globini.
Pregled rešitve
SelectNodes vrne vsa ujemanja izraza JPath, SelectSingleNode (kratka oblika JPath)
prvo ujemanje ali Nothing, Exists pa pove, ali ujemanje obstaja. Bralne metode (GetString …) preberejo
prvo ujemanje kot tipizirano vrednost. JPath sledi RFC 9535 z razširitvami
in odstopanji, ki so našteta na strani Vrednosti in omejitve.
Izvedba
| Izraz | Zadetek |
|---|---|
$ | Koren |
$.customer.name, $['first name'] | Član; oglati oklepaji za imena s presledki ali posebnimi znaki |
$.lines[0], $.lines[-1] | Element po položaju, štetem od 0; negativni položaji se štejejo od konca |
$.lines[*] | Vsi elementi |
$..id | Vsak id v poljubni globini |
$.lines[0,2], $.lines[1:3] | Izbor, rezina (konec ni vključen) |
$.lines[?@.price < 10 && @.kind == 'A'] | Elementi, katerih člani ustrezajo pogoju; tudi [?(@.price < 10)] |
$.lines[?match(@.no, 'A-.*')] | Funkcije filtrov: length, count, match, search, value |
customer.name | Brez $: od vozlišča, na katerem pokličete metodo |
Dim line As JNode
For Each line In doc.SelectNodes("$.lines[?@.price >= 100]")
Debug.Print line.GetString("no"), line.GetCurrency("price")
Next
' A default covers both a missing key and the value null.
Debug.Print doc.GetString("$.customer.vatId", "")
Dim first As JNode
Set first = doc.SelectSingleNode("$..items[?@.stock == 0]")
If Not first Is Nothing Then Debug.Print first.Path
Opombe
matchz regularnim izrazom primerja celotno vrednost,searchkaterikoli njen del. Vzorci so regularni izrazi .NET, ne I-Regexp (RFC 9485); neveljaven vzorec vrne false, kot predpisuje RFC 9535, false pa vrne tudi vzorec, ki se izvaja dlje kot eno sekundo. Glejte Vrednosti in omejitve.- Ključi razlikujejo velike in male črke, tako kot v JSON.
ExistsjeTruetudi za ključ, katerega vrednost jenull; bralna metoda brez nadomestne vrednosti tedaj sproži napako. Neobvezne vrednosti berite z nadomestno vrednostjo (GetString(path, "")), ki enako pokrije manjkajoč ključ innull.- Neveljaven izraz sproži
jePathSyntaxs položajem težave. Pathvozlišča vrne kanonični izraz te knjižnice (zapis s piko, ne oklepajska oblika normalizirane poti po RFC 9535), s katerim vozlišče znova najdete, na primer$.lines[2].- Prevedeni izrazi se hranijo v predpomnilniku; če isti izraz uporabljate v zanki prek veliko zapisov, se ne razčlenjuje vedno znova.
Sorodne teme
sl/wiki/msaccess/json/how-to/query-with-jpath.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille