0

我无法弄清楚如何正确循环通过WinHttp.WinHttpRequest 我得到的 JSON(Object) 响应。

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

在此处输入图像描述

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":"value1"
            },
            {
               "Name":"name2",
               "Value":"value2"
            }
         ]
      }
   ]
}

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

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

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

我似乎找不到将 JSON 转换为带有数组length()size()函数的数组的方法。我搜索并找到了UBound()LBound()但我认为它只能用于数组而不是对象。

我会很感激任何帮助。我大部分时间都在使用 Java,而 VBA 中的情况有些不同。

谢谢你。

4

1 回答 1

1

response("record")是一个(也是你的json中的Collection任何其他内容)。[]该集合中的每个项目都是一个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
于 2020-08-24T02:26:58.187 回答