JSON для VBA - Ошибка 13 несоответствие "корневых значений" - PullRequest
0 голосов
/ 04 июня 2018

Я пытался получить некоторую информацию из JSON API, и все шло хорошо.Таким образом, я начал получать ошибки несоответствия, когда я пытаюсь проанализировать значения, которые находятся внутри «корня» JSON.

Код, который я использую ниже:

Public Sub Times()    
    Dim http As Object, JSON As Object, i As Integer

    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", "https://api.cartolafc.globo.com/time/id/1084847/7", False
    http.Send

    Set JSON = ParseJson(http.responseText)  
    i = 2

    Application.ScreenUpdating = False

    Sheets("Youtube").Select       
    For Each Item In JSON
        Sheets("Mais Escalados").Cells(i, 2).value = Item("pontos")
        i = i + 1
    Next

    Application.ScreenUpdating = True

    MsgBox ("Atualização Completa")
End Sub

Я могу проанализироватьданные внутри atletas подпунктов или любого другого заголовка, изменяющего код следующим образом:

Sheets("Mais Escalados").Cells(i, 2).value = Item("atletas")("nome")

Но когда я пытаюсь проанализировать информацию типа pontos в корне, я получаю ошибку несоответствия.

Here you can see the JSON tree

1 Ответ

0 голосов
/ 04 июня 2018

Это даст вам корневое значение для ключа "pontos":

JSON("pontos")

Вы не можете зацикливаться на корневых ключах, как показано в опубликованном коде: вам необходимо проверить типзначения каждого ключа, прежде чем пытаться записать его на лист:

Public Sub Times()

    Dim http As Object, JSON As Object, i As Integer, k
    Set http = CreateObject("MSXML2.XMLHTTP")

    http.Open "GET", "https://api.cartolafc.globo.com/time/id/1084847/7", False
    http.Send
    Set JSON = ParseJson(http.responseText)

    For Each k In JSON
        Debug.Print k, TypeName(JSON(k))
    Next

End Sub

Вывод:

atletas       Collection
clubes        Dictionary
posicoes      Dictionary
status        Dictionary
capitao_id    Double
time          Dictionary
patrimonio    Double
esquema_id    Double
pontos        Double
valor_time    Double
rodada_atual  Double
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...