微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA如何遍历WinHttp.WinHttpRequest

如何解决VBA如何遍历WinHttp.WinHttpRequest

我不知道如何正确遍历WinHttp.WinHttpRequest的JSON(Object)响应 我得到了。

下面是正在使用的参考。我更喜欢保持原样并使用WinHttpRequest

enter image description here

Dim response As Object ' global


Function sendRequest(requestURL As String) ' send the http REST request url of API transaction
    Dim request As New WinHttp.WinHttpRequest
    request.Open "GET",requestURL,True
    request.setRequestHeader "Authorization","Bearer " + tokenResp
    request.setRequestHeader "Accept","application/json"
    request.send
    request.waitForResponse
    
    
    Set response = ParseJson(request.ResponseText)
    

    ' Debug.Print vbNewLine & "Response : " & vbNewLine
    ' Debug.Print "Request ResponseText : " & request.ResponseText
End Function

下面是我得到的JSON响应的样子。有更多记录。

{
   "Record":[
      {
         "NameValue":[
            {
               "Name":"name1","Value":"value1"
            },{
               "Name":"name2","Value":"value2"
            }
         ]
      },{
         "NameValue":[
            {
               "Name":"name1","Value":"value2"
            }
         ]
      }
   ]
}

response一个对象。 我可以Debug.Print response("Record")(1)("NameValue")(1)("Value")来获得第一条记录

Debug.Print response("Record")(1)("NameValue")(1)("Value")'value1

但是我需要能够遍历它以获得所有值,而不仅仅是第一个

我似乎找不到一种使用数组length()size()函数将JSON转换为数组的方法。我搜索发现UBound()LBound(),但我认为它只能用于数组,不能用于对象。

我将不胜感激。我大多数时候都使用Java,而VBA则有所不同。

谢谢。

解决方法

response("record")Collection(也是json中[]中的其他内容)。该集合中的每个项目都是一个Dictionary(同样,{}中的任何内容)

Dim itmRec,nameVal,itm

For each itmRec in response("Record")
    set nameVal = itmRec("NameValue")
    for each itm in nameVal
        debug.print itm("Name"),itm("Value")
    next itm
Next itmRec

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。