Office JSON · für Entwickler in Access und VBA
JSON-Parser für Access und VBA – mit dem Objektmodell von MSXML
Antworten von Webdiensten laden, mit JPath abfragen, typisiert lesen. Beträge und Kennungen kommen an, wie sie gesendet wurden.
JDoc, LoadJson mit ParseError, SelectNodes und For Each arbeiten wie bei XML. Auf den PCs braucht es dafür nur eine Datei je Bitversion von Office – kein .NET, kein Setup, keine Administratorrechte.
- Antwort des Webdiensts
- JDoc und JPath
- Typisierter Wert
LoadJson liest die Antwort; ein JPath-Ausdruck findet das Feld; eine Get-Methode liefert es als Currency, Decimal, Date oder String.
Ausgangslage
VBA liest XML mit MSXML. Für JSON gibt es nichts Vergleichbares.
Webdienste, Zahlungsanbieter und Behördenschnittstellen antworten heute mit JSON. In Access und VBA heißt das meist: die Antwort mit Zeichenfolgenfunktionen zerlegen, ScriptControl verwenden oder ein VBA-Modul aus dem Internet einbinden.
- Beträge und lange Kennungen verlieren Stellen. Wird eine Zahl als Double gelesen, bleiben 15 bis 17 signifikante Stellen: Eine 19-stellige Kennung kommt verändert an, und 0.1 + 0.2 ist nicht genau 0.3.
- Datumswerte sind Text. JSON kennt keinen Datumstyp. Wer Zeitstempel mit Zone selbst umrechnet, findet Termine später um einige Stunden verschoben.
- Schleifen statt Abfragen. Ein Feld tief im Dokument heißt: sich von Ebene zu Ebene durchhangeln und jede Stelle prüfen, an der etwas fehlen kann.
Warum nicht VBA-JSON?
Für viele Projekte reicht es – bis es auf genaue Beträge ankommt
In den meisten Foren fällt der Name VBA-JSON, ein Modul unter MIT-Lizenz: keine Installation, der Quelltext liegt offen, und für einfache Antworten genügt es. Lange Zahlen gibt es von sich aus sogar als Text zurück, damit Kennungen keine Stellen verlieren. Jede andere Zahl wird aber zum Double – auch ein Betrag wie 0,1. ScriptControl, der zweite verbreitete Weg, steht nur in 32-Bit-Office zur Verfügung.
Office JSON behält den Text jeder Zahl und wandelt ihn erst um, wenn Sie einen Typ anfordern – ohne Umweg über Double. Passt ein Wert nicht in diesen Typ, löst die Get-Methode einen Fehler aus, statt ihn abzuschneiden. Werte und Grenzen: Typzuordnung, Zahlen, Datumswerte
Mit Office JSON
JSON so lesen, wie Sie XML lesen
Einen Kunden von einem REST-Dienst anfordern und seinen Namen lesen. Ist der Text kein JSON, gibt LoadJson False zurück und beschreibt das Problem in ParseError – wie loadXML bei MSXML.
Das Beispiel stammt unverändert aus der Anleitung Webdienst aufrufen und seine JSON-Antwort lesen.
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
- Nichts Neues zu lernen. JDoc als Dokument, LoadJson mit ParseError, SelectSingleNode, SelectNodes und Knotenlisten mit For Each – die Konzepte von MSXML.
- Exakte Zahlen. Json, Save und GetString ändern nie eine Ziffer. GetCurrency und GetDecimal wandeln ohne Umweg über Double um: 0.1 + 0.2 bleibt exakt, 19-stellige Kennungen bleiben als Decimal erhalten. Currency rundet auf vier Nachkommastellen, Decimal auf 28 bis 29 signifikante Stellen.
- Abfragen statt Schleifen. JPath nach RFC 9535: Pfade, Platzhalter, rekursiver Abstieg, Bereiche und Filter.
- Typisiert lesen, mit Ersatzwert. GetString, GetLong, GetCurrency, GetDecimal, GetDate und weitere, jeweils mit einem optionalen Ersatzwert wie bei Nz().
- Datumswerte nach ISO 8601 in beide Richtungen, mit einer Regel für Zeitzonen, die für das ganze Dokument gilt.
- Fehler nach Nummer auswerten. Feste Fehlernummern mit dem Pfad oder der Position in der Beschreibung; die Nummer ist in jeder Sprache dieselbe.
Stand und Grenzen
Passt Office JSON zu Ihrer Anwendung?
Freigegeben
Es passt, wenn Ihre Anwendung in Microsoft Access aus Microsoft 365 unter Windows 11 läuft – in 32 oder 64 Bit, als ACCDB, als ACCDE oder mit der Access Runtime. Prüfen Sie vorher diese Punkte:
- Access 2016, 2019, 2021 oder LTSC, andere Windows-Versionen: In diesem Release nicht unterstützt.
- Die Datei passt zur Bitversion von Office, nicht von Windows. Registriert wird sie je Windows-Benutzer ohne Administratorrechte; über den Bootstrapper geschieht das bei der Auslieferung Ihrer Anwendung.
- Strikt nach RFC 8259: Kommentare, Kommas nach dem letzten Eintrag oder einfache Anführungszeichen sind Fehler mit Zeile und Spalte – auch wenn andere Werkzeuge solchen Text annehmen.
- Früher WKL Access JSON: Ein Verweis auf die alte Typbibliothek löst sich ohne erneutes Kompilieren auf; Bibliothekskennung, ProgIDs und Member sind gleich geblieben.
Hier beginnen
- TutorialEin Dokument laden, Werte mit JPath lesen, ändern und speichern.
- Webdienst aufrufenEine JSON-Antwort lesen und JSON an einen Dienst senden.
- Exakte Beträge und große KennungenWelche Get-Methode welchen Wert ohne Verlust liest.
- JSON mit JPath abfragenPfade, Platzhalter, Filter und Funktionen.
- Werte und GrenzenTypzuordnung zwischen JSON und VBA, Zahlen, Datumswerte, Dokumente, JPath.
- Fehlerbehebung und API-ReferenzTypische Fehler mit Ursache und Lösung; die API-Referenz der Klassen ist englisch.
Sie wollen wissen, was Office JSON umfasst und wie es zu Ihren Anwendern kommt? Funktionen, Voraussetzungen und Grenzen stehen auf der Produktseite.
Zur Produktseite