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

Contribuez Delphi Discussion :

Delphi et JSON


Sujet :

Contribuez Delphi

  1. #1
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut Delphi et JSON
    Depuis quelques versions déjà, Delphi propose la sérialisation JSON des objets Delphi, comme je travaille sur un projet qui exploite beaucoup ces notions, j'ai finalement décidé de créer ma propre unité que je livre en OpenSource

    l'article suivant donne des explications que l'on trouve aussi dans l'application exemple téléchargeable en bas de page !

    http://lookinside.free.fr/delphi.php?Delphi+XE8+et+JSON

    EDIT: mise à jour pour corriger un petit bug et améliorer la syntaxe pour les types non objet.

    EDIT: mise à jour pour exploiter quelque chose que je ne connaissais pas, l'inférence de type sur les generic:

    quand on déclare le type générique au niveau de la classe, on doit obligatoirement déclarer le type pour faire appel à la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class function JSON<T>.fromJSON(const instance: T);
     
    // on doit utiliser par exemple
    begin
      JSON<string>.fromJSON('hello');
    end;
    Alors qu'en plaçant le type générique sur la méthode, Delphi est capable de le déterminer tout seul !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class function JSON.fromJSON<T>(const instance: T);
     
    begin
      JSON.fromJSON<string>('hello');
      JSON.fromJSON('hello'); // on peut s'abstenir de déclarer explicitement le type !
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    Bonjour Paul !

    Merci pour le partage des connaissances et du code.

    Je me demandais quelle est exactement la particularité de la ou des dernières versions de Delphi qui fait que ton unité ne peut pas être utilisée avec les versions antérieures ?

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Bonjour Roland,

    Le programme démo utilise des unités qui ne sont présentes que dans XE8 et ne compilera pas sur une version plus ancienne...mais avec des modifications mineures il est possible je pense de faire fonctionner tout cela dans la série XE.

    la classe JSON utilise les Generic, et il faut une version qui donne des informations de type à tous les niveaux (anciennement $M+)...il serait amusant de voir dans quelle mesure on peut remonter le temps jusque du Delphi 6 ou 7 par exemple
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    Merci pour ta réponse, Paul.

    J'ai essayé de compiler seulement l'unité avec XE2 mais sans succès :

    [DCC Error] Execute.JSON.pas(251): E2474 Record type required
    [DCC Error] Execute.JSON.pas(748): E2008 Incompatible types
    [DCC Error] Execute.JSON.pas(751): E2149 Class does not have a default property
    [DCC Error] Execute.JSON.pas(763): E2003 Undeclared identifier: 'Value'
    [DCC Error] Execute.JSON.pas(763): E2003 Undeclared identifier: 'TypeData'
    [DCC Error] Execute.JSON.pas(764): E2003 Undeclared identifier: 'Offset'
    [DCC Error] Execute.JSON.pas(768): E2023 Function needs result type
    [DCC Error] Execute.JSON.pas(768): E2029 Declaration expected but '.' found
    ...
    Du coup pour me consoler je suis allé regarder les possibilités offertes par Free Pascal pour l'utilisation du format JSON.

    J'ai aussi potassé un peu les génériques avec XE2. J'ai au moins compris le principe et j'ai été surpris de voir des choses approchantes de ce qui existe par exemple dans le langage Lua et qui m'avait fait m'intéresser à celui-ci. Mais bon j'aime quand même mieux rester sur les sentiers battus, que je n'ai pas fini d'explorer.

Discussions similaires

  1. Delphi XE7 et JSON
    Par XDavidX dans le forum Delphi
    Réponses: 7
    Dernier message: 05/03/2015, 18h49
  2. 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
  3. [Kylix] Migration delphi -> kylix
    Par Christian dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2002, 22h50
  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