【问题标题】:VBA How To Loop Through JSON response from WinHttp.WinHttpRequestVBA如何循环来自WinHttp.WinHttpRequest的JSON响应
【发布时间】:2020-08-23 16:54:08
【问题描述】:

我不知道如何正确循环来自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 中的情况有些不同。

谢谢。

【问题讨论】:

  • 使用 json 查看器查看结构。看起来你想在外部 For Each over response("Record") 这是字典的集合。

标签: json vba winhttp winhttprequest vba6


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2016-07-04
    • 1970-01-01
    相关资源
    最近更新 更多