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 :

[Delphi XE] JSON - ISuperObject Récupérer une valeur


Sujet :

Delphi

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    390
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 390
    Par défaut [Delphi XE] JSON - ISuperObject Récupérer une valeur
    Bonjour, voici mon json :
    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
    {
    	"messages": {
    		"error": [{
    				"code": 400,
    				"message": "The request data is invalid.",
    				"trace": ""
    			}
    		],
    		"errorTranslated": [{
    				"code": 400,
    				"message": "lists: List ' 'new_list2_ch' ' does not exist for website ' 'ch' '.",
    				"trace": ""
    			}
    		]
    	}
    }
    je veux récupérer la valeur "message" d' "errorTranslated". J'ai testé deux bouts de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
              for row_item in lJsonResponse.O['messages'] do
              begin
                s:= row_item.AsArray.O[0].s['message'];
              end;
    Qui me récupère tous les "message" (en soit ce code pourrait me suffire si l'ordre ne change pas...donc pas top)

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for row_item in lJsonResponse.O['messages'] do
              begin
                if Assigned(row_item.O['errorTranslated']) then
                  for lMessage in row_item.O['errorTranslated'] do
                    s := lMessage.S['message'];
              end;
    qui me renvoie qui ne me renvoie pas le message.

    Comment je peux catcher le "errorTranslated", pour accéder au "message" ?

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    https://github.com/onryldz/x-superobject

    Sans doute en utilisant la possibilité du where décrite sur cette page

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    390
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 390
    Par défaut
    J'étais plutôt parti sur les Super Expressions mais sans résultats. Pour la partie WHERE, c'est plutôt pour modifier une donnée du JSON et j'ai dû mal à voir où ça peut m'aider.

    Après je suis en ISuperObject , je n'utilise pas XSuperObject.

    J'ai essayé aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lJsonResponse.A['errorTranslated'].O[0].S['message'];
    Je met cette doc de côté car très interessante

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    comme j'aime bien cette "library", je jetterai un coup d’œil à ce problème ce soir.

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    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
    uses XSuperJSON, XSuperObject;
     
    procedure TForm3.Button1Click(Sender: TObject);
    var
      X, Obj: ISuperObject;
      A: ISuperArray;
    begin
      // Charger le JSON
      X := SO(Memo1.Lines.Text);
     
      // Retrouver le tableau errorTranslated
      A := X.O['Messages'].A['errorTranslated'];
     
      // Trouver l'objet qui correspond au premier élément du tableau
      Obj := A.O[0];
     
      // Afficher le contenu de l'objet
      Memo1.Lines.Text := Obj.AsJSON;
     
      // Affichage du message
      ShowMessage( Obj.S['message'] );
    end;

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    et pour revenir sur le cas du where :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      // Retrouver le ou les éléments qui correspond(ent) au code 400
      // Dans le cas présent, j'imagine 1 seul
     
      // Where renvoie un tableau filtré
      A2 := A.Where(function(Arg: IMember): Boolean
        begin
          with Arg.AsObject do
           Result := I['code'] = 400
        end);
     
      // Affichage identique au précédent
      ShowMessage(A2.O[0].S['message']);

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    390
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 390
    Par défaut
    Merci pour ces réponses, nous n'utilisons pas XSuperObject mais uniquement SuperObject, mais vu les possibilités qu'il offre, je vais l'inclure à mon projet.

    J'opterai d'avantage pour la première solution (ISuperArray) d'un point de vue personnel.

    Merci

  8. #8
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    xsuperobject est la version compatible avec firemonkey

    Delphi Cross Platform Rapid JSON

    C'est basé sur SuperObject. ça devrait être compatible.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/05/2015, 18h22
  2. [XSL]récupérer une valeur de plusieurs fichiers XML
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/02/2006, 00h32
  3. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49
  4. Réponses: 2
    Dernier message: 17/06/2005, 13h38
  5. Réponses: 2
    Dernier message: 11/12/2004, 21h20

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