VBA Как перебрать ответ JSON от WinHttp.WinHttpRequest

Я не могу понять, как правильно перебрать ответ JSON (Object) от WinHttp.WinHttpRequest, который я получаю.

Ниже приведены используемые ссылки. Я предпочитаю оставить все как есть и использовать 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 все немного по-другому.

Спасибо.


person jordan    schedule 23.08.2020    source источник
comment
Используйте средство просмотра json, чтобы увидеть структуру. Похоже, вы хотите получить внешний ответ For Each (запись), который представляет собой набор словарей.   -  person QHarr    schedule 23.08.2020


Ответы (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
person Tim Williams    schedule 24.08.2020