В своем ответе на Используя VBA и VBA-JSON для доступа к данным JSON из Wordpress API , я написал функцию PrintJSONAccessors()
, которая разбивает способ доступа к данным в структуре JSON.
Проверка объекта JSON в окне Locals показывает, что он состоит из набора коллекций.
Проверка TypeName элементав Immediate Window также обнаруживается, что элемент действительно является коллекцией '
?TypeName(Item)
Collection
PrintJSONAccessors JSON, "?JSON"
Код выведет правильный способ доступа к данным
Вот как вы можете получить доступ к элементам Коллекции
For Each Item In JSON
Sheets(1).Cells(i, 1).Value = Item(1) ' Items reference as an example
Sheets(1).Cells(i, 2).Value = Item(2)
Sheets(1).Cells(i, 3).Value = Item(3)
Sheets(1).Cells(i, 4).Value = Item(4)
Sheets(1).Cells(i, 5).Value = Item(5)
i = i + 1
Next
Я бы написал функцию для преобразования данных JSON в массив
Public Sub exceljson()
Dim http As Object
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://api.bitfinex.com/v2/candles/trade:5m:tEOSUSD/hist?start=1535760000000&end=1538265600000&sort=1", False
http.Send
Dim results As Variant
results = BitfinexTextToArray(http.responseText)
Worksheets(1).Range("A1").Resize(UBound(results), UBound(results, 2)).Value = results
MsgBox ("complete")
End Sub
Function BitfinexTextToArray(responseText As String) As Variant
Dim item As Variant, JSON As Object
Dim MaxColumns As Long
Set JSON = ParseJson(responseText)
For Each item In JSON
If item.Count > MaxColumns Then MaxColumns = item.Count
Next
Dim results As Variant
ReDim results(1 To JSON.Count, 1 To MaxColumns)
Dim c As Long, r As Long
For Each item In JSON
r = r + 1
For c = 1 To item.Count
results(r, c) = item(c)
Next
Next
BitfinexTextToArray = results
End Function