在Windows上的Excel VBA中,如何遍历解析的JSON数组?

首先,我不再使用自定义JSON解析库,而是使用ScriptControl的Eval方法作为所有JSON代码的基础。另外,我们对本机Microsoft解决方案表示偏爱。

这是一个先前的问题,在Windows上的Excel

VBA中,如何减轻IDE的大写行为破坏解析的JSON的点语法遍历的问题?这个问题基于此。它显示了与使用点语法遍历已解析的JSON对象相比,使用VBA.CallByName的鲁棒性更高。

在此问题中,询问如何遍历已解析的JSON数组。首先,这里是一个带帽子技巧的小脚本方法,用于ozmike

'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

但是,不管您相信与否,VBA.CallByName都可以本地使用,不仅可以获取数组的长度,还可以访问元素。查看答案。

回答:

因此,VBA.CallByName也可以访问数组中的元素以及找到数组的长度

'Tools->References->

'Microsoft Script Control 1.0; {0E59F1D2-1FBE-11D0-8FF2-00A0D10038BC}; C:\Windows\SysWOW64\msscript.ocx

Private Sub TestJSONParsingArrayWithCallByName()

Dim oScriptEngine As ScriptControl

Set oScriptEngine = New ScriptControl

oScriptEngine.Language = "JScript"

Dim sJsonString As String

sJsonString = "[ 1234, 2345 ]"

Dim objJSON As Object

Set objJSON = oScriptEngine.Eval("(" + sJsonString + ")")

'* Using VBA.CallByName we get the length of the array

Dim lLength As Long

lLength = VBA.CallByName(objJSON, "length", VbGet)

Debug.Assert lLength = 2

'* Believe or not one uses "0","1",.... with callbyname to get an element

Debug.Assert VBA.CallByName(objJSON, "0", VbGet) = 1234

Debug.Assert VBA.CallByName(objJSON, "1", VbGet) = 2345

End Sub

以上是 在Windows上的Excel VBA中,如何遍历解析的JSON数组? 的全部内容, 来源链接: utcz.com/qa/427578.html

回到顶部