【发布时间】:2016-10-09 05:24:41
【问题描述】:
在这里回答我自己的问题。
我在 Excel VBA 中使用 JSON 完成了一些工作,并发布了许多发现,我将以问答格式进行发布
https://stackoverflow.com/help/self-answerhttps://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/
所以在 stackoverflow 的其他地方可以看到有关在 VBA 中解析 JSON 的问题,但他们似乎错过了一两个技巧。
首先,我放弃使用自定义 JSON 解析库,而是使用 ScriptControl 的 Eval 方法作为我所有 JSON 代码的基础。 我们还表达了对原生 Microsoft 解决方案的偏好。
这是一个先前的问题In Excel VBA on Windows, how to mitigate issue of dot syntax traversal of parsed JSON broken by IDE's capitalisation behaviour?,此问题建立在此基础之上。它展示了如何使用 VBA.CallByName 更加健壮 而不是使用点语法来遍历解析的 JSON 对象。
在这个问题中,询问如何遍历已解析的 JSON 数组。首先这里是一个小脚本方法 给 ozmike 戴帽子https://stackoverflow.com/users/334106/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 不仅可以用于获取数组的长度,还可以用于访问元素。查看答案。
这是系列 5 的问题 2。这是完整系列
第二季度In Excel VBA on Windows, how to loop through a JSON array parsed?
Q5In Excel VBA on Windows, for parsed JSON variables what is this JScriptTypeInfo anyway?
【问题讨论】: