Eine Get-Methode löst jeTypeMismatch aus
GetLong, GetCurrency, GetDate oder eine andere Get-Methode löst den Fehler jeTypeMismatch
(vbObjectError + 516) aus, obwohl der Pfad existiert oder sogar ein Ersatzwert angegeben ist.
Umgebung
Alle Versionen von WKL Office JSON.
Ursache
Die Get-Methoden wandeln den Wert um, den sie über den Pfad finden, und lehnen Werte ab, die nicht passen, statt sie abzuschneiden oder den Ersatzwert zurückzugeben:
GetLongfür eine Zahl mit Nachkommastellen (2.5) oder außerhalb desLong-Bereichs.GetBooleanfür eine andere Zeichenfolge als"true"oder"false"(verglichen ohne Rücksicht auf Groß- und Kleinschreibung, umgebende Leerzeichen werden ignoriert; Zahlen werden akzeptiert: Eine Zahl, die nach der Umwandlung inDecimal0 ist, ergibt False).GetDouble,GetCurrencyoderGetDecimalfür eine Zahl außerhalb des Wertebereichs des Typs.- Eine Get-Methode für Zahlen bei einer Zeichenfolge, die keine JSON-Zahl ist (
"12,5","007","+5"). GetDatefür eine Zahl (zum Beispiel einen Unix-Zeitstempel).- Ein Ersatzwert, der sich nicht in den Typ der Get-Methode umwandeln lässt (
GetLong(path, "abc")). - Jede Get-Methode ohne Ersatzwert bei JSON-
null.
Der Ersatzwert ersetzt nur einen fehlenden Pfad oder null. Ein Wert des falschen Typs bleibt ein Fehler, denn ein
stillschweigend eingesetzter Ersatzwert würde ein Datenproblem verdecken.
Lösung
- Prüfen Sie den Wert:
Debug.Print doc.SelectSingleNode(path).ToJson. - Verwenden Sie die Get-Methode, die zu den Daten passt:
GetDoubleoderGetDecimalfür Zahlen mit Nachkommastellen,GetStringfür Datumswerte in anderen Formaten (wandeln Sie diese dann mitCDatenach Ihren eigenen Regeln um). - Geben Sie für Felder, die
nullsein können, einen Ersatzwert an, zum BeispielGetLong("$.qty", 0).
de/wiki/msaccess/json/troubleshooting/getter-type-mismatch.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille