Wie wird in Excel VBA unter Windows eine Schleife durch ein JSON-Array durchgeführt, das analysiert wurde?
hier meine eigene Frage beantworten.
Ich habe mit JSON in Excel VBA gearbeitet und viele Ergebnisse veröffentlicht, die ich im Q & A-Format veröffentlichen werde.https: //stackoverflow.com/help/self-answe http: //blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions
Also woanders auf stackoverflow kann man Fragen zum Parsen von JSON in VBA sehen, aber sie scheinen einen oder zwei Tricks zu verpassen.
Zu Beginn verzichte ich auf benutzerdefinierte JSON-Parsing-Bibliotheken und verwende stattdessen die Eval-Methode von ScriptControl als Grundlage für meinen gesamten JSON-Code. Außerdem geben wir eine Präferenz für native Microsoft-Lösungen an.
Hier ist eine vorherige Frage Wie kann in Excel VBA unter Windows das Problem der Punktsyntax-Überquerung von analysiertem JSON, das durch das Großschreibungsverhalten von IDE unterbrochen wurde, behoben werden? worauf diese Frage aufbaut. Es zeigt, wie die Verwendung von VBA.CallByName robuster ist als die Verwendung der Punktsyntax zum Durchlaufen eines analysierten JSON-Objekts.
In dieser Frage wird gefragt, wie ein geparstes JSON-Array durchlaufen wird. Erstens ist hier ein Miniskript-Ansatz mit einer Hutspitze zu ozmikehttps: //stackoverflow.com/users/334106/ozmik
'Tools->References->
'Microsoft Script Control 1.0; {0E59F1D2-1FBE-11D0-8FF2-00A0D10038BC}; C:\Windows\SysWOW64\msscript.ocx
Private Sub TestJSONParsingArrayWithMiniScript()
'Hat tip to ozmike https://stackoverflow.com/users/334106/ozmike
'Based on https://stackoverflow.com/questions/5773683/excel-vba-parsed-json-object-loop#19359035
Dim oScriptEngine As ScriptControl
Set oScriptEngine = New ScriptControl
oScriptEngine.Language = "JScript"
oScriptEngine.AddCode "Object.prototype.myitem=function( i ) { return this[i] } ; "
Dim sJsonString As String
sJsonString = "[ 1234, 2345 ]"
Dim objJSON As Object
Set objJSON = oScriptEngine.Eval("(" + sJsonString + ")")
Debug.Assert objJSON.myitem(0) = 1234
Debug.Assert objJSON.myitem(1) = 2345
End Sub
Aber ob Sie es glauben oder nicht VBA.CallByName kann nativ nicht nur verwendet werden, um die Länge eines Arrays zu ermitteln, sondern auch, um auf Elemente zuzugreifen. Siehe Antwort
Dies ist Frage 2 der Serie von 5. Hier ist die vollständige Serie
Q5Was ist in Excel VBA unter Windows für analysierte JSON-Variablen überhaupt JScriptTypeInfo?