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

Delphi Discussion :

Accéder à un JSONArray dans un JSONArray


Sujet :

Delphi

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Décembre 2021
    Messages : 164
    Par défaut Accéder à un JSONArray dans un JSONArray
    Bonjour,

    Je sais que mon intitulé est assez tordu, je pense qu'un bout de code expliquera mieux mon souci, d'abord voici un exemple de JSON que je doit traiter :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    {"correctness":{"question_id_86":true,
        "question_id_85":true,
        "question_id_84":false,
        "question_id_83":true,
        "question_id_82":true,
        "question_id_81":true,
        "question_id_80":false,
        "question_id_79":false,
        "question_id_78":true,
        "question_id_77":false,
        "question_id_76":true,
        "question_id_75":true,
        "question_id_74":true,
        "question_id_73":true,
        "question_id_72":true,
        "question_id_71":true,
        "question_id_70":true,
        "question_id_69":true,
        "question_id_68":true,
        "question_id_67":true,
        "question_id_66":true,
        "question_id_65":true},
     
    "user_answered":{
        "question_id_86":"330",
        "question_id_85":"327",
        "question_id_84":"323",
        "question_id_83":"319",
        "question_id_82":"317",
        "question_id_81":["309","312","310"],
        "question_id_80":["307","308"],
        "question_id_79":["300","301"],
        "question_id_78":"296",
        "question_id_77":"295",
        "question_id_76":"289",
        "question_id_75":"287",
        "question_id_74":"284",
        "question_id_73":["280","279","282"],
        "question_id_72":"276",
        "question_id_71":"272",
        "question_id_70":"269",
        "question_id_69":["264","265","261","262"],
        "question_id_68":["259","257","256","258"],
        "question_id_67":"254",
        "question_id_66":"251",
        "question_id_65":"248"},
    "passed_time":"8 minutes 48 seconds","calc_method":"by_correctness","attributes_information":[]}
    Puis le code pour passer en revu l'objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    JSONObj := TJSONObject.ParseJSONValue(Response.Content) as TJSONObject; // Response = TRESTResponse qui contient mon JSON
        JSONObj := JSONObj.GetValue('user_answered') as TJSONObject;
        JSONObj2 := TJSONObject.ParseJSONValue(Response.Content) as TJSONObject;
        JSONObj2 := JSONObj2.GetValue('correctness') as TJSONObject;
        for JSONPair in JSONObj do
        Begin
          Var Question := StringReplace(JSonPair.JsonString.Value,'question_id_','',[]);
          Var Reponse := JSonPair.JsonValue.Value;
          ShowMessage(Question+'/'+Reponse);  // Fonction de test pour afficher les valeurs
          //TableQuestion.Locate('id',Question,[]);
        End;
    Ce petit bout de code fonctionne très bien pour les valeurs simple comme "question_id_82":"317".
    Mais dès qu'il y a plusieurs valeurs comme "question_id_73":["280","279","282"] La valeur de Reponse est vide (d'ailleurs je ne peut pas connaitre les clés de ce JSON à l'avance), j'ai essayé pas mal de choses sans succès, si vous avez des idées je les prend volontier !

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 921
    Par défaut
    C'est une structure assez bizarre d'avoir un coup un chaine et un coup un tableau de chaine.
    Il aurait été préférable d'avoir toujours un tableau de chaine. Un tableau avec un seul élément reste un tableau.

    Si tu ne peux pas changer la structure, tu peux tester le type du JsonValue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (JSonPair.JsonValue is TJSONArray) then
    begin
     
    end;

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Décembre 2021
    Messages : 164
    Par défaut
    En fait c'est un module WordPress qui stock les résultats de cette manière donc je ne peux pas le modifier.

    C'est exactement que je cherchais j'arrive bien à lire toutes les réponses maintenant! Un grand merci a toi !

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

Discussions similaires

  1. Accéder à un tableau dans une fonction
    Par valanagrid dans le forum C++
    Réponses: 10
    Dernier message: 18/09/2006, 16h08
  2. Accéder à une valeur dans un Recordset
    Par xanthos1348 dans le forum Access
    Réponses: 7
    Dernier message: 30/08/2006, 11h08
  3. [C#]Comment accéder à un champ dans un FormView ?
    Par Louisa dans le forum ASP.NET
    Réponses: 8
    Dernier message: 18/07/2006, 12h05
  4. [VB6]Accéder à une fenêtre dans une application VB
    Par issaines dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 05/04/2006, 14h58
  5. [JAR] Accéder à un fichier dans un jar
    Par Nanoua dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/07/2004, 13h00

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