Office JSON · za razvijalce v programu Access in VBA
Razčlenjevalnik JSON za Access in VBA – z objektnim modelom MSXML
Odgovor spletne storitve naložite, z JPath v njem poiščete polja in jih preberete v pravem tipu. Zneski in identifikatorji pridejo takšni, kot so bili poslani.
JDoc, LoadJson s ParseError, SelectNodes in For Each delujejo kot pri XML. Na računalnikih uporabnikov potrebujete le eno datoteko za 32- ali 64-bitni Office – brez .NET, brez namestitvenega programa in brez skrbniških pravic.
- Odgovor spletne storitve
- JDoc in JPath
- Tipizirana vrednost
LoadJson prebere odgovor, izraz JPath najde polje, bralna metoda pa ga vrne kot Currency, Decimal, Date ali String.
Izhodišče
VBA bere XML z MSXML. Za JSON ničesar podobnega nima.
Spletne storitve, ponudniki plačil in državni portali danes odgovarjajo v obliki JSON. V programu Access in VBA to navadno pomeni: odgovor razčleniti z nizovnimi funkcijami, uporabiti ScriptControl ali vključiti modul VBA z interneta.
- Zneski in dolgi identifikatorji izgubijo števke. Če se število prebere kot Double, ostane 15 do 17 veljavnih števk: 19-mestni identifikator pride spremenjen, 0.1 + 0.2 pa ni natanko 0.3.
- Datumi so besedilo. JSON nima podatkovnega tipa za datum. Kdor časovne žige s pasom preračunava sam, ima pozneje termine zamaknjene za nekaj ur.
- Zanke namesto poizvedb. Polje globoko v dokumentu pomeni prebijanje od ravni do ravni in preverjanje vsakega mesta, kjer bi lahko kaj manjkalo.
Zakaj ne VBA-JSON?
Za veliko projektov zadošča – dokler ne gre za natančne zneske
Na večini forumov priporočajo VBA-JSON, modul z licenco MIT: ne potrebuje namestitve, izvorna koda je odprta, za preproste odgovore pa je povsem dovolj. Dolga števila privzeto celo vrne kot besedilo, da identifikatorji ne izgubijo števk. Vsako drugo število pa postane Double – tudi znesek, kot je 0,1. ScriptControl, druga pogosta pot, je na voljo le v 32-bitnem Officeu.
Office JSON ohrani besedilo vsakega števila in ga pretvori šele, ko zahtevate tip – brez ovinka prek Double. Če vrednosti ni mogoče pretvoriti v ta tip, bralna metoda sproži napako, namesto da bi vrednost odrezala. Vrednosti in omejitve: preslikava tipov, števila, datumi
Z Office JSON
JSON berete tako, kot berete XML
Od storitve REST zahtevate stranko in preberete njeno ime. Če besedilo ni JSON, LoadJson vrne False in težavo opiše v ParseError – tako kot loadXML pri MSXML.
Primer je nespremenjeno prevzet iz navodil Klic spletne storitve in branje njenega odgovora JSON.
Public Function GetCustomerName(ByVal customerId As Long) As String Dim http As Object Dim doc As New JDoc Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0") http.Open "GET", "https://api.example.com/customers/" & customerId, False http.setRequestHeader "Accept", "application/json" http.send If http.Status <> 200 Then Err.Raise vbObjectError + 1000, "GetCustomerName", "HTTP " & http.Status & ": " & http.statusText End If If Not doc.LoadJson(http.responseText) Then Err.Raise vbObjectError + 1001, "GetCustomerName", _ "Invalid JSON in line " & doc.ParseError.Line & ": " & doc.ParseError.Reason End If GetCustomerName = doc.GetString("$.name", "")End Function
- Nič novega za učenje. JDoc kot dokument, LoadJson s ParseError, SelectSingleNode, SelectNodes in seznami vozlišč s For Each – pojmi iz MSXML.
- Natančna števila. Json, Save in GetString nikoli ne spremenijo nobene števke. GetCurrency in GetDecimal pretvarjata brez ovinka prek Double: 0.1 + 0.2 ostane natančno, 19-mestni identifikatorji se ohranijo kot Decimal. Currency zaokroži na štiri decimalna mesta, Decimal na 28–29 veljavnih števk.
- Poizvedbe namesto zank. JPath po RFC 9535: poti, nadomestni znaki, rekurzivni spust, rezine in filtri.
- Tipizirano branje z nadomestno vrednostjo. GetString, GetLong, GetCurrency, GetDecimal, GetDate in druge, vsaka z izbirno nadomestno vrednostjo, podobno kot pri Nz().
- Datumi po ISO 8601 v obeh smereh, s pravilom za časovne pasove, ki velja za ves dokument.
- Napake s stalnimi številkami. Opis napake navede pot ali položaj v dokumentu, številka napake pa je v vsakem jeziku enaka.
Stanje in omejitve
Ali Office JSON ustreza vaši aplikaciji?
Izdano
Ustreza, če vaša aplikacija teče v programu Microsoft Access iz Microsoft 365 v sistemu Windows 11 – 32- ali 64-bitno, kot ACCDB, kot ACCDE ali z okoljem Access Runtime. Pred tem preverite naslednje:
- Access 2016, 2019, 2021 ali LTSC, druge različice sistema Windows: v tej izdaji niso podprte.
- Datoteko izberete glede na bitnost Officea (32 ali 64 bitov), ne sistema Windows. Registrira se za vsakega uporabnika sistema Windows posebej, brez skrbniških pravic; če aplikacijo dostavljate z Bootstrapper, se to zgodi ob dostavi.
- Strogo po RFC 8259: komentarji, vejice za zadnjim elementom in enojni narekovaji so napake z vrstico in stolpcem – tudi če druga orodja tako besedilo sprejmejo.
- Prej WKL Access JSON: sklic na staro knjižnico tipov se razreši brez ponovnega prevajanja; identifikator knjižnice, ProgID-ji in člani so ostali enaki.
Kje začeti
- VadnicaNaložite dokument, preberite vrednosti z JPath, ga spremenite in shranite.
- Klic spletne storitveBranje odgovora JSON in pošiljanje JSON storitvi.
- Natančni zneski in veliki identifikatorjiKatera bralna metoda prebere katero vrednost brez izgube.
- Poizvedbe z JPathPoti, nadomestni znaki, filtri in funkcije.
- Vrednosti in omejitvePreslikava tipov med JSON in VBA, števila, datumi, dokumenti, JPath.
- Odpravljanje težav in referenčni priročnik APIPogoste napake z vzrokom in rešitvijo; referenčni priročnik API je v angleščini.
Vas zanima, kaj Office JSON obsega in kako pride do vaših uporabnikov? Funkcije, zahteve in omejitve so na strani izdelka.
Na stran izdelka