Как получить значения JSON для работы в VBA-JSON? - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь получить доступ к вложенным значениям JSON, которые возвращаются из API, с которым я сейчас работаю.Кажется, что в этом JSON нет имен полей, поэтому очень трудно следовать большинству примеров в Интернете.

URL URL - НАЖМИТЕ ЗДЕСЬ

Я использую VBA-JSON через этот процесс, и я получил его для успешного отображения «responseText» в MsgBox.

Я ищу способ заставить этот код работать.

Public Sub exceljson()
    Dim http As Object, JSON As Object, i As Integer
    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
    Set JSON = ParseJson(http.responseText)
    i = 2
    For Each Item In JSON
        Sheets(1).Cells(i, 1).Value = Item("one")  ' Items reference as an example
        Sheets(1).Cells(i, 2).Value = Item("two")
        Sheets(1).Cells(i, 3).Value = Item("three")
        Sheets(1).Cells(i, 4).Value = Item("four")
        Sheets(1).Cells(i, 5).Value = Item("five")
        i = i + 1
    Next
    MsgBox ("complete")
End Sub

1 Ответ

0 голосов
/ 27 ноября 2018

В своем ответе на Используя VBA и VBA-JSON для доступа к данным JSON из Wordpress API , я написал функцию PrintJSONAccessors(), которая разбивает способ доступа к данным в структуре JSON.

Проверка объекта JSON в окне Locals показывает, что он состоит из набора коллекций.

enter image description here

Проверка TypeName элементав Immediate Window также обнаруживается, что элемент действительно является коллекцией '

?TypeName(Item)
Collection
PrintJSONAccessors JSON, "?JSON"

Код выведет правильный способ доступа к данным

enter image description here

Вот как вы можете получить доступ к элементам Коллекции

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...