首页 > 解决方案 > JSON 到 VBA - “根值”上的错误 13 不匹配

问题描述

我试图从 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根目录之类的信息时,会出现不匹配错误。

在这里你可以看到 JSON 树

标签: jsonvbaexcelparsing

解决方案


这将为您提供键“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

推荐阅读