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 все немного по-другому.

Спасибо.

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
Другие вопросы по тегам