2 votes

Comment obtenir des données à partir de tableaux imbriqués JSON dans Excel vba-json ?

Je prépare une sorte de logiciel fonctionnant avec Excel avec une API, et j'utilise la bibliothèque vba-json, et je ne sais pas comment obtenir des données à partir de tableaux imbriqués sur JSON.

J'ai essayé quelques tutoriels et d'autres questions similaires que j'ai trouvées ici. Mais à chaque fois que j'essaie, j'obtiens une erreur différente. Runtime error 5, 9, 13. J'ai essayé différentes manières d'accéder aux données, mais à chaque fois, j'obtiens une erreur lorsque j'entre dans un tableau.

Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
    MyRequest.Open "GET", "https://pokeapi.co/api/v2/pokemon/ditto/?fbclid=IwAR2pJwAgODOlI-Gdn8pH-RDFCcUfQWiYLZIVCnP8e-V_9gEwYymqRldpiFk"
    MyRequest.Send

    Dim Json As Object
    Set Json = JsonConverter.ParseJson(MyRequest.ResponseText)
    MsgBox Json("stats")("id")(0)("base_stat")

J'aimerais récupérer les données du tableau sélectionné pour pouvoir ensuite travailler avec, par exemple à partir de

("stats")("id")(0)("base_stat")

obtenir

48

La source Json est sur le code.

2voto

QHarr Points 24420

Ainsi, avec JSON, le [] désigne une collection sur laquelle vous pouvez For Each et à laquelle vous pouvez accéder par index, le {} indique des dictionnaires dont vous pouvez For Each les clés de dict, ou accéder aux éléments par clé.

Vous pouvez vous faire une idée de la structure en la collant dans un visualisateur json tel que este . Vous devrez vous familiariser avec la lecture de json mais vous verrez que, pour la valeur que vous voulez, il y a un chemin de :

json("stats")(1)("base_stat")

Note : L'indexation commence à un pour les collections dans VBA JSON bien qu'elle affiche 0 dans le visualisateur.

Lecture de la structure :

enter image description here


Option Explicit

Public Sub test()
    Dim Json As Object
    With CreateObject("WinHttp.WinHttpRequest.5.1")
        .Open "GET", "https://pokeapi.co/api/v2/pokemon/ditto/?fbclid=IwAR2pJwAgODOlI-Gdn8pH-RDFCcUfQWiYLZIVCnP8e-V_9gEwYymqRldpiFk"
        .send
        Set Json = JsonConverter.ParseJson(.responseText)
    End With
    MsgBox Json("stats")(1)("base_stat")
End Sub

Notez qu'il existe plusieurs réponses sur StackOverflow qui fournissent un code qui répertorie les chemins d'accès à chaque élément d'une structure json. En particulier, je me souviens de cette excellente réponse de @tinman aquí . Il ne remplace pas l'apprentissage de la lecture de JSON, mais constitue un excellent outil pour vous aider et vérifier votre compréhension.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X