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

Langage Delphi Discussion :

Parsing d'un tableau dans un JSON


Sujet :

Langage Delphi

  1. #1
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    2 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2 010
    Points : 6 299
    Points
    6 299
    Par défaut Parsing d'un tableau dans un JSON
    Bonjour à tous,

    J'ai un fichier JSON sous forme de string dans lequel j'ai des tableaux et je cherche à connaitre le nombre d'éléments d'un tableau: Simple JsonArray.count... Certes mais je n'arrive pas à convertir une partie de mon JSON en Array

    Avec le code suivant, je peux récupérer la valeur de "location_id" qui se trouve dans le premier élément du tableau "locations_aggregated" qui se trouve dans le 1er élément du tableau "results"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    JsonValue := TJSonObject.ParseJSONValue(JSONresponse);
     
    str:=JsonValue.GetValue<string>('results[0].locations_aggregated[0].location_id');

    Mais comment faire pour connaître le nombre d'éléments dans le tableau "locations_aggregated"?

    J'ai essayé plusieurs approches

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    myJsonARRAY:=JsonValue.GetValue('results[0].locations_aggregated') as TJSONARRAY;
    count:=myJsonARRAY.count;
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myJsonARRAY:=JsonValue.GetValue<Array>('results[0].locations_aggregated');
    Les 2 approches sont refusées à la compilation avec une erreur "La méthode Getvalue nécessite des arguments type explicites"

    Est-ce que qqn a la solution,,,,

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    essaie avec un TryGetValue<>() ou tout simplement en descendant les niveaux un par un.

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    2 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2 010
    Points : 6 299
    Points
    6 299
    Par défaut
    Je me réponds à moi-même... Des fois que cela puisse servir à quelqu'un.

    La réponse est...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JsonArray:=JsonValue.GetValue<TJSONArray>('results[0].locations_aggregated');
    count:=JsonArray.count;
    <TJSONArray> et pas <Array>! On a donc <string>, mais pas <Array>... Allez chercher une logique dans cette usine à gaz!!!!


    On peut vraiment pas dire que la gestion du JSON soit une force de Delphi! Pas logique, compliqué, pas de doc et pas d'exemples

  4. #4
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Citation Envoyé par Anselme45 Voir le message
    Je me réponds à moi-même... Des fois que cela puisse servir à quelqu'un.

    La réponse est...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JsonArray:=JsonValue.GetValue<TJSONArray>('results[0].locations_aggregated');
    count:=JsonArray.count;
    <TJSONArray> et pas <Array>! On a donc <string>, mais pas <Array>... Allez chercher une logique dans cette usine à gaz!!!!


    On peut vraiment pas dire que la gestion du JSON soit une force de Delphi! Pas logique, compliqué, pas de doc et pas d'exemples
    bin, c'est normal : c'est un TJSONArray, pas un array (j'avais pas fait gaffe que tu l'avais tenté avec le mauvais type, sorry)

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    2 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 2 010
    Points : 6 299
    Points
    6 299
    Par défaut
    Citation Envoyé par pprem Voir le message
    bin, c'est normal : c'est un TJSONArray, pas un array (j'avais pas fait gaffe que tu l'avais tenté avec le mauvais type, sorry)
    A oui? Et un <string> dans ce cas n'est pas un string mais un JSONstring?????

    Désolé pprem, mais je t'ai connu plus pertinent dans tes interventions!

  6. #6
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 614
    Points
    3 614
    Par défaut
    Citation Envoyé par Anselme45 Voir le message
    A oui? Et un <string> dans ce cas n'est pas un string mais un JSONstring?????

    Désolé pprem, mais je t'ai connu plus pertinent dans tes interventions!
    c'est le type dans lequel tu veux la récupérer, TJSONString se converti en string sans problème, les tableaux ne le font pas

  7. #7
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 095
    Points : 1 531
    Points
    1 531
    Billets dans le blog
    5
    Par défaut
    Attention avec JSON il faut bien distinguer ce qui est coté JSON et ce qui est coté Pascal.
    Quand on récupère des éléments d'un JSON il faut utiliser les JSONArray et JSONobject

    Pour récupérer les valeurs je recommande fortement l'utilisation de TryGetValue
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     if elem.TryGetValue<integer>('partie', refpartie) and elem.TryGetValue<String>('titre', titre) then
        begin
          lbPartiesDispo.items.AddObject(titre, TReference.Create(refpartie));
        end
    else
     gereErreur;
    Cela permet d'éviter le plantage du programme quand le JSON n'est pas exactement comme il le devrait.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour récupérer un tableau dans un JSON
    Par eristoff72 dans le forum Android
    Réponses: 1
    Dernier message: 03/02/2017, 20h12
  2. Réponses: 2
    Dernier message: 31/08/2016, 14h20
  3. [AJAX] Mettre un tableau dans une donnée json
    Par reventlov dans le forum jQuery
    Réponses: 2
    Dernier message: 15/05/2014, 17h43
  4. Parser un tableau dans un fichier JSON
    Par L'aigle de Carthage dans le forum jQuery
    Réponses: 8
    Dernier message: 25/03/2014, 17h59
  5. Réponses: 2
    Dernier message: 27/05/2002, 20h46

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