Color scheme: Dark
You are here: start » sl » Dokumentacija » Orodja za Microsoft Access » WKL Office JSON » how-to » Klic spletne storitve in branje njenega odgovora JSON

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

  • responseText dekodira 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 pred LoadJson dekodirajte responseBody z ADODB.Stream (Charset = "utf-8").
  • Sinhroni klic (False v Open) blokira Access, dokler storitev ne odgovori; za počasne storitve nastavite http.setTimeouts.
  • Zgornji URL je le primer; glave za overjanje so odvisne od storitve.

Sorodne teme

sl/wiki/msaccess/json/how-to/call-a-web-service.txt · Last modified: by Wolfgang van der Stille