Klic spletne storitve in branje njenega odgovora JSON
Podatke v VBA zahtevate od storitve REST in iz odgovora JSON preberete posamezne vrednosti.
Pregled rešitve
MSXML2.ServerXMLHTTP.6.0 (del sistema Windows) pošlje zahtevo; JDoc.LoadJson razčleni
responseText; bralne metode preberejo vrednosti. Ali je LoadJson vrnil False in kakšen je status HTTP, se
preverja ločeno, ker lahko storitev na napako odgovori s telesom, ki ni JSON.
Izvedba
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
Če želite JSON poslati, sestavite dokument in posredujte njegovo besedilo:
Dim body As New JDoc body.SetValue "$.name", "Novak" body.SetValue "$.active", True http.Open "POST", "https://api.example.com/customers", False http.setRequestHeader "Content-Type", "application/json; charset=utf-8" http.send body.Json
Opombe
responseTextdekodira telo z naborom znakov, ki ga navede strežnik; pri storitvah, ki pošiljajo UTF-8, ne da bi to navedle, so lahko šumniki in drugi posebni znaki prikazani napačno. V tem primeru predLoadJsondekodirajteresponseBodyzADODB.Stream(Charset = "utf-8").- Sinhroni klic (
FalsevOpen) blokira Access, dokler storitev ne odgovori; za počasne storitve nastavitehttp.setTimeouts. - Zgornji URL je le primer; glave za overjanje so odvisne od storitve.
Sorodne teme
- `JDoc.LoadJson`, `JDoc.Json` (referenca API v angleščini)
sl/wiki/msaccess/json/how-to/call-a-web-service.txt · Last modified: by Wolfgang van der Stille