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
responseTextdecodiert 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 dannresponseBodyvorLoadJsonmit einemADODB.Stream(Charset = "utf-8").- Der synchrone Aufruf (
FalseinOpen) blockiert Access, bis der Dienst antwortet; legen Sie für langsame Dienste mithttp.setTimeoutsZeitlimits fest. - Die URL oben ist ein Beispiel; welche Header zur Authentifizierung nötig sind, hängt vom Dienst ab.
Verwandte Themen
- API-Referenz (Englisch): `JDoc.LoadJson`, `JDoc.Json`
de/wiki/msaccess/json/how-to/call-a-web-service.txt · Zuletzt geändert: von Wolfgang van der Stille