问题描述
我不知道如何正确遍历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":"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