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 :

JSON en Delphi


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projets
    Inscrit en
    Août 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 127
    Par défaut JSON en Delphi
    Bonjour,

    J'ai un projet à faire dans lequel je dois faire transiter des infos entre Delphi et un portail PHP.
    Je souhaite le réaliser en JSON et j'ai donc commencé à investiguer sur la techno coté Delphi.

    Je me heurte à quelques difficultés. J'ai du mal de trouver des tutos intéressants. J'ai commencé à travailler avec les classes de bases de Delphi, et je rencontre des difficultés.

    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
    TContrat =class
    private
      FdDateDeb: TDate;
    public
       property dDateDeb: TDate read FdDateDeb write FdDateDeb;
    end;
    
    TApprenant =class
    private
       FsNom   :string;
       [JSONName('ListContrat')]
       FListContrat: TObjectList<TContrat>;
    public
       property sNom   :string read FsNom write FsNom;
       property ListContrat: TObjectList<TContrat> read FListContrat write FListContrat;
    end;
    
    ...
    procedure TForm3.Button2Click(Sender: TObject);
    var
       apprenant : TApprenant;
       contrat : TContrat;
    begin
       Memo1.Clear;
    
       apprenant := TApprenant.Create;
       apprenant.sNom :='JEAN';
    
       contrat := TContrat.Create;
       contrat.dDateDeb := StrToDate('01/01/2015');
       apprenant.ListContrat.Add(contrat);
    
       contrat := TContrat.Create;
       contrat.dDateDeb := StrToDate('01/01/2016');
       apprenant.ListContrat.Add(contrat);
    
       Memo1.Lines.Add(TJson.ObjectToJsonString(apprenant));end;
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {
        "sNom": "JEAN",
        "ListContrat": {
            "ownsObjects": true,
            "items": [{
                "dDateDeb": 42005,
            },{
                "dDateDeb": 42370,
            }],
            "count":2,
            "arrayManager":{}
        }}
    Dans cette exemple la sérialisation du la TObjectList<> m'a donné des données genre "ownsObjects" que je ne souhaite pas voir (pas d'intérêt pour PHP).

    Comment enlever ce genre d'info ?
    Est la meilleur solution pour faire du JSON ? Doit-on passer par un autre frameWork, ... ?

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Quid d'un TList au lieu du TObjectList ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projets
    Inscrit en
    Août 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 127
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Quid d'un TList au lieu du TObjectList ?
    Peu importe le type, j'ai toujours des données parasites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    {
    	"sNom": "JEAN",
    	"sPrenom": "Paul",
    	"ListContrat": {
    		"items": [{
    			"dDateDeb": 42370,
    			"dDateFin": 42735
    		}],
    		"count": 1,
    		"arrayManager": {}
    	}
    }
    "count": 1 et "arrayManager": sont 2 propriétés induites par la TList<>

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Par défaut
    Est-ce que tu as déjà regardé du côté de mORMot ? http://blog.synopse.info/post/2013/1...-serialization

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Si avec un TList les propriétés parasites sont toujours les dernières, il doit suffire de charger la chaîne dans un TStringList et de faire successivement autant de Delete[Count-2] que de propriétés inutiles
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef de projets
    Inscrit en
    Août 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 127
    Par défaut
    J'ai trouvé une solution en passant directement par TJSONMarshal et RegisterConverter

    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
     
       m := TJSONMarshal.Create(TJSONConverter.Create);
     
     
       m.RegisterConverter(TApprenant, 'FListContrat',
          function(Data: TObject; Field: String): TListOfObjects
          var
             ContratApp: TContrat;
             I: integer;
          begin
             SetLength(Result, TApprenant(Data).ListContrat.Count);
     
     
             I := Low(Result);
             for ContratApp in TApprenant(Data).ListContrat do
             begin
                Result[I] := ContratApp;
                Inc(I);
             end;
          end);
     
     
          m.Marshal(apprenant).ToString;
    Je m'étais fait avoir car le TJSONMarshal est dans 2 uses Delphi.
    - REST.Json => marche très bien.
    - Data.DBXJSONReflect => laisse des propriétés parasites.

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

Discussions similaires

  1. Delphi et JSON
    Par Paul TOTH dans le forum Contribuez
    Réponses: 3
    Dernier message: 01/09/2015, 10h23
  2. Delphi XE7 et JSON
    Par XDavidX dans le forum Delphi
    Réponses: 7
    Dernier message: 05/03/2015, 18h49
  3. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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