当前位置: 首页 > 面试题库 >

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

邴墨竹
2023-03-14
问题内容

首先,我不再使用自定义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


 类似资料:
  • 问题内容: 我正在尝试从reddit的API迭代解析的JSON响应。 我已经进行了一些谷歌搜索,似乎其他人也遇到了这个问题,但是似乎没有一种解决方案适合我。Ruby将[‘data] [‘children]视为索引,这会导致错误,但是我只是想从JSON中获取这些值。有什么建议吗? 我的代码: 我在终端中收到的错误消息: 问题答案: 您正在尝试遍历,这是一个哈希,而不是一个列表。您需要通过以下方式从J

  • 问题内容: 我有一个php页面,可从其中获取json中的响应: 我想循环它,并将每个追加到div。 这是我尝试的: 该警报为,响应为json数组。 请帮忙。 问题答案: 您的数组具有存储对象 使用的默认键(0,1):

  • 问题内容: 如何使用CodeIgniter在以下JSON中遍历并显示名称? 问题答案: 1)是一个字符串,您需要首先对其进行解码。 2)您需要遍历对象并获取其成员

  • 问题内容: 我有一些带有多个对象的JSON代码: 我的JSON循环代码段是: 您能否让我知道如何检查阵列中是否没有“ MNGR_NAME”。(以我为例,它出现了两次。) 问题答案: 您需要在迭代时访问对象。

  • 问题内容: 我想遍历JSON文件的内容并将其打印到控制台。 我想我确实把清单混在一起了。 这就是我试图获取所有元素的方法 这是我的JSON(简体:) (可在此处找到完整的JSON输出:Link) 当然,我得到一个错误,我应该在[]中使用整数输入,而不是字符串,但是我不知道该怎么做。 这是: 我怎么了? 问题答案: 实际上,要查询,只需将其添加到最后一行的括号中即可。除此之外,它似乎可以在命令行上的

  • 问题内容: 我正在使用一个API,该API返回如下所示的JSON 在Swift中,我使用两个函数来获取并解析JSON 然后我用 可以很好地解析JSON。当我打印出 我得到了数组的所有内容。但是,我无法访问每个单独的索引。我很肯定这是一个数组,因为我之间 返回正确的长度。但是,如果我尝试通过使用访问单个索引 XCode关闭语法高亮显示并给我以下信息: 并且代码将无法编译。 这是XCode 6的错误,