IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Erreur parse JSon avec JsonConverter


Sujet :

VBA

  1. #21
    Membre régulier Avatar de Tchicken
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Août 2017
    Messages : 108
    Points : 85
    Points
    85
    Par défaut
    j'utilise http://json.parser.online.fr/ et il a parsé tous les fichiers que je lui ai présenté

  2. #22
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 946
    Points
    55 946
    Billets dans le blog
    131
    Par défaut
    Salut

    Grâce à WinJerome, que je remercie, j'ai compris comment fonctionnait la bibliothèque.

    Voici un code qui lit les résultats et les place dans un tableau. Il fonctionne avec le texte du lien que tu m'as donné, dans lequel j'ai enlevé l'espace en trop au niveau de la valeur 512 du cheval 2398870. Il faudrait peut-être tester avec le Json original.

    [EDIT: Optimisation du code]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub TestTierce()
      Dim Résultat As Object
      Dim DateRésultat
      Dim r As Range
      Dim Cheval As Object
     
      Set Résultat = ParseJson(shSource.Range("a1").Value)
      DateRésultat = Left(Replace(Résultat("ResultSet")("dateMAJ"), "T", " "), 19)
      For Each Cheval In Résultat("ResultSet")("partants")
        Set r = Range("Tableau1").ListObject.ListRows.Add().Range
        r(1).Value = DateRésultat
        r(2).Value = Cheval("idCheval")
        r(3).Value = Cheval("distance")
        r(4).Value = Cheval("Deferre")
        r(5).Value = Cheval("nomCheval")
        r(6).Value = Cheval("numParticipation")
        r(13).Value = Cheval("idJockey")
        r(14).Value = Cheval("sexeAge")
        r(15).Value = Cheval("driver")
        r(7).Value = Cheval("stats")("pourcentageReussite")
        r(8).Value = Cheval("stats")("nbVictoires")
        r(9).Value = Cheval("stats")("nbCourses")
        r(10).Value = Cheval("stats")("nbPlaces")
        r(11).Value = Cheval("stats")("musique")
        r(12).Value = Cheval("stats")("ecart")
      Next
    End Sub
    Fichiers attachés Fichiers attachés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #23
    Membre régulier Avatar de Tchicken
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Août 2017
    Messages : 108
    Points : 85
    Points
    85
    Par défaut
    Un grand merci à tous

  4. #24
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Besoin d'une fonction de lecture Json
    Bonjour,

    Tout d'abord merci pour les Echanges de ce forum qui sont très riches.

    J’utilise la librairie JsonConverter.bas pour parser des fichiers Json et elle marche très bien. Néanmoins, je n'arrive pas à développer une fonction permettant de prenant en paramètre le chemin d'une élément Json (path) et me retourner la valeur de cet élément.

    en gr, je voudrias transformer la procédure suivante en fonction qui prend en paramètre le chemin "("listeFinancement")(1)("listePersonnePhysique")(1)("dateNaissance")" qui est dans le code.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Public Sub getValue()
    Dim JsonString As String
    Dim JsonObject As Object, http As Object
    Dim item As Object
    Dim i As Long
    Dim ws As Worksheet
     
    Dim fichier As String
        ' ActiveSheet.Cells.Clear
        ' With Application.FileDialog(msoFileDialogFilePicker)
        ' .Show
        ' On Error Resume Next
        ' fichier = .SelectedItems.item(1)
        ' On Error GoTo 0
        ' End With
        ' If fichier > "" Then [A1].CurrentRegion = fichier
     
    ' origine des informations
        Set http = CreateObject("MSXML2.XMLHTTP")
        http.Open "GET", [A1], False
        http.send
        JsonString = http.responsetext
     
    ' decodage
        Set ws = Worksheets("DDF")
        Set JsonObject = JsonConverter.ParseJson(JsonString)
     
        'MsgBox JsonObject("listeFinancement")(1)("listePersonnePhysique")(1)("dateNaissance")
     
    End Sub
    Merci beaucoup pour votre aide

  5. #25
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Si votre json contient un tableau d'éléments avec cette structure :

    [e1,e2,e3,...,en]

    alors pour repérer chaque élément il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set e1 = JsonObject(1) ' pour e1
    set e2 = JsonObject(2) ' pour e2
    'etc..
    Si maintenant votre json contient un tableau de dictionnaires :

    [{"Nom": "Dupont",""Prénom"": ""Jean""},{"Nom": "Durand",""Prénom"": ""Marc""},...,{"Nom": "Martin",""Prénom"": ""Luc""}]

    alors pour obtenir par exemple, le nom de la deuxième personne, il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MsgBox JsonObject(2)("Nom") ' pour "Durand"
    'etc..
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Bonjour.

    Merci pour la réponse. Mon fichier est Json qui contient tout type JSON.

    Ce que je veux est une fonction VBA qui prend en paramètre le chemin d'un élément et me retourne un valeur

  7. #27
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Peut-être essayer ce type de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Public Function RechercherElement(JsonString As String, ParamArray chemin()) As String
        Dim JsonObject As Object
     
        Set JsonObject = ParseJson(JsonString)
     
        Select Case UBound(chemin)
     
            Case 0
                RechercherElement = JsonObject(chemin(0))
            Case 1
                RechercherElement = JsonObject(chemin(0))(chemin(1))
            Case 2
                RechercherElement = JsonObject(chemin(0))(chemin(1))(chemin(0))
     
        End Select
     
    End Function
    L'argument chemin() contient en fait une liste d'arguments, exemple :

    2,"Nom"
    pour
    (2)("nom")

    Exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JsonString="[{""Nom"": ""Dupont"",""Prénom"": ""Jean""},{""Nom"": ""Durand"",""Prénom"": ""Marc""},{""Nom"": ""Martin"",""Prénom"": ""Luc""}]"
     
    valeur = RechercherElement(JsonString, 2,"Nom")
    Il faut essayer de vous en inspirer ou de l'adapter, bien sûr ça ne marchera pas directement...

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  8. #28
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci beaucoup pour cette aide. J'ai essayer de l'adapter pour prendre des chemins avec une profondeur supérieur à 3 et un chemin avec les éléments séparé par un point (par exemple 2.Nom) et voici ce que ca donne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Function RechercherElement(JsonString As String, path As String) As String
        Dim JsonObject As Object
        Dim Tableau() As String
        Dim i As Integer
     
        Set JsonObject = ParseJson(JsonString)
        Tableau = Split(path, ".")
     
          While i <= UBound(Tableau)
             Set JsonObject = JsonObject(Tableau(i))
             i = i + 1
         Wend
     
       RechercherElement = JsonObject(Tableau(i))
    End Function
    J'obtiens des erreurs que je n’arrive pas à résoudre
    Merci par avance

    Cordialement

  9. #29
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Essayez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Public Function RechercherElement(JsonString As String, path As String) As String
        Dim JsonObject As Object
        Dim item As Object
        Dim Tableau() As String
        Dim i As Integer
     
        Set JsonObject = ParseJson(JsonString)
        Tableau = Split(path, ".")
     
        i = 0
     
        While i < UBound(Tableau)
           If IsNumeric(Tableau(i)) Then
              Set JsonObject = JsonObject(CLng(Tableau(i)))
           Else
              Set JsonObject = JsonObject(Tableau(i))
           End If
           i = i + 1
        Wend
     
       RechercherElement = JsonObject(Tableau(i))
    End Function
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  10. #30
    Futur Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup User. Ça marche très bien.

    Très bonne journée

  11. #31
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Pas de souci, bon week-end
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. parsing json avec gson
    Par Mikegoss dans le forum Android
    Réponses: 7
    Dernier message: 30/06/2013, 20h11
  2. Parsing JSON avec Jackson sous Android
    Par Feanorin dans le forum Android
    Réponses: 4
    Dernier message: 20/12/2012, 12h37
  3. Problème parsing JSON avec Jackson
    Par drhouse87 dans le forum Android
    Réponses: 6
    Dernier message: 06/03/2012, 19h25
  4. Erreur requete json avec jquery 1.5
    Par gtraxx dans le forum jQuery
    Réponses: 2
    Dernier message: 06/02/2011, 18h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo