Farbschema: Hell
Sie befinden sich hier: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Office JSON » how-to » Webdienst aufrufen und seine JSON-Antwort lesen

Webdienst aufrufen und seine JSON-Antwort lesen

Sie fordern in VBA Daten von einem REST-Dienst an und lesen Felder aus der JSON-Antwort.

Lösungsüberblick

MSXML2.ServerXMLHTTP.6.0 (Bestandteil von Windows) sendet die Anfrage; JDoc.LoadJson parst responseText; die Get-Methoden lesen die Felder. Ob LoadJson False zurückgibt und welchen HTTP-Status der Dienst meldet, prüfen Sie getrennt, denn ein Dienst kann einen Fehler mit einem Inhalt beantworten, der kein JSON ist.

Umsetzung

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

Um JSON zu senden, erzeugen Sie ein Dokument und übergeben seinen Text:

Dim body As New JDoc
body.SetValue "$.name", "Müller"
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

Hinweise

  • responseText decodiert den Inhalt mit dem Zeichensatz, den der Server angibt; bei Diensten, die UTF-8 senden, ohne es anzugeben, können Umlaute falsch erscheinen. Decodieren Sie dann responseBody vor LoadJson mit einem ADODB.Stream (Charset = "utf-8").
  • Der synchrone Aufruf (False in Open) blockiert Access, bis der Dienst antwortet; legen Sie für langsame Dienste mit http.setTimeouts Zeitlimits fest.
  • Die URL oben ist ein Beispiel; welche Header zur Authentifizierung nötig sind, hängt vom Dienst ab.

Verwandte Themen

de/wiki/msaccess/json/how-to/call-a-web-service.txt · Zuletzt geändert: von Wolfgang van der Stille