Expert Liaison de données JSON
Remonter à Menu Fichier
Fichier > Nouveau > Autre... > Delphi > Web > Liaison de données JSON
L'expert Liaison de données JSON fournit un moyen facile de créer des types de données Delphi basés sur une structure de données JSON et de mapper ces types sur les données JSON en utilisant l'une des bibliothèques de marshaling et de sérialisation JSON Delphi.
Cet expert guide le développeur dans la définition de différentes options pour l'aider à créer une nouvelle unité avec le mappage des données basé sur une structure de données JSON existante utilisée comme plan.
Sommaire
Résumé : Comment cela fonctionne-t-il ?
L'expert prend un texte JSON, l'analyse et génère un ensemble de types Delphi.
Comme JSON ne dispose pas d'une définition de schéma officielle ou largement utilisée, le résultat de l'analyse représente les types les plus adaptés aux données JSON spécifiées.
Le code généré est optimisé pour une bibliothèque JSON spécifiée, que vous pouvez choisir dans l'expert. Voici les bibliothèques actuellement prises en charge :
Exemple
Par exemple, en fonction des données JSON :
{"customer": { "id": 1, "name": "Mark", "phone": "(831) 431-1000" }}
L'expert génère les types suivants pour la bibliothèque REST.Json :
[JsonSerialize(jmAllPubProps)]
TCustomer = class(TPersistent)
private
Fid: Integer;
Fname: string;
Fphone: string;
public
property id: Integer read Fid write Fid;
property name: string read Fname write Fname;
property phone: string read Fphone write Fphone;
end;
[JsonSerialize(jmAllPubProps)]
TData = class(TPersistent)
private
Fcustomer: TCustomer;
public
constructor Create;
destructor Destroy; override;
property customer: TCustomer read Fcustomer;
end;
Ensuite, l'application peut utiliser cette bibliothèque ou la classe TJSONMapper<T> de haut niveau pour charger les données JSON dans ces instances de type ou pour sérialiser des instances de type dans JSON.
Par exemple, en utilisant REST.Json :
// Load JSON data from “s” string into new TData instance
LData := TJson.JsonToObject<TData>(s);
// Serialize TData instance referenced by LData into JSON string
s := TJson.ObjectToJsonString(LData);
Ou en utilisant TJSONMapper<T> :
// Set JSON library to use
TJSONMapper<TData>.SetDefaultLibrary('REST.Json');
// Load JSON data from “s” string into new TData instance
LData := TJSONMapper<TData>.Default.ObjFrom(s);
// Serialize TData instance referenced by LData into JSON string
s := TJSONMapper<TData>.Default.ToStr(LData);
Utilisation de l'expert Liaison de données JSON
Vous devez d'abord ouvrir l'expert Liaison de données JSON en sélectionnant Fichier > Nouveau > Autre... > Delphi > Web > Liaison de données JSON.
Effectuez ensuite les étapes suivantes :
Etape 1 : sélectionnez la source JSON
Sur la page Source JSON, spécifiez la source JSON à partir de laquelle vous voulez générer les types Delphi.
Les alternatives sont :
- Coller depuis le presse-papiers : utilise le texte JSON déjà enregistré dans le presse-papiers. Cette option est uniquement disponible lorsque le presse-papiers contient déjà du texte JSON valide.
- Saisir les données dans la zone d'édition : permet d'introduire le texte JSON dans un éditeur fourni par l'expert lui-même
- Lire depuis le fichier : l'utilisateur doit fournir un fichier contenant le texte JSON.
- Obtenir depuis le service REST : importe le texte JSON via une requête HTTP GET à partir d'une URL indiquée sur la page suivante.
Etape 2 : saisissez le texte JSON, fournissez un fichier ou définissez le service REST
Lorsque le texte JSON n'est pas copié depuis le presse-papiers, selon l'option sélectionnée à l'étape précédente, l'utilisateur doit effectuer l'une des actions suivantes :
- Coller le texte JSON manuellement dans la zone d'édition.
- Fournir le chemin du fichier contenant le texte JSON.
- Saisir une URL de point de terminaison, un nom d'utilisateur et un mot de passe.
Etape 3 : spécifiez les options de liaison
Sur la page Options de liaison, spécifiez comment mapper/lier les éléments JSON aux éléments Delphi. Ici, vous pouvez choisir l'une des bibliothèques de mappage disponibles et sélectionner d'autres paramètres de la logique de mappage.
Les options sont les suivantes :
- Bibliothèque de mappage JSON : bibliothèque de marshaling/sérialisation JSON, pour laquelle les types Delphi doivent être générés. Les options sont :
- System.JSON.Serializers
- REST.Json
- Mapper le tableau JSON sur : le type de données Delphi qui sera utilisé pour mapper le tableau JSON. Les options possibles sont les suivantes :
- TArray
- TList (certaines bibliothèques JSON, comme REST.Json, peuvent ne pas prendre en charge le mappage “TList” sur les tableaux JSON directement).
- Mapper l'objet JSON sur : le type de données Delphi qui sera utilisé pour mapper les objets JSON. Les options possibles sont les suivantes :
- TObject
- enregistrement (certaines bibliothèques JSON, comme REST.Json, peuvent ne pas prendre en charge le type “enregistrement”).
- Mapper le membre JSON sur : le type de données Delphi qui sera utilisé pour mapper les membres d'objet JSON. Les options possibles sont les suivantes :
- propriété
- champ
- Mapper la chaîne JSON sur : le type de données Delphi qui sera utilisé pour mapper les valeurs de chaînes JSON. Les options possibles sont les suivantes :
- Unicode
- Ansi
- Accesseurs de propriétés : ces options déterminent le code de la classe en cours de génération. Les options possibles sont les suivantes:
- champs
- Getters
- Setters
- Getters et Setters
- Remarque: Les informations JSON sont mappées sur des champs via des propriétés, mais vous pouvez demander que ces propriétés soient mappées sur des champs directement, sur un champ lors de la lecture ou une méthode setter en écriture, le contraire (très rare) ou les deux méthodes pour la lecture et l'écriture.
Etape 4 : sélectionnez les options de code
Sur la page Options de code, spécifiez comment nommer les entités Delphi.
Les options sont les suivantes :
- Nom de classe de base : nom de classe à partir duquel tous les types d'entités générés seront hérités lorsque, sur la page précédente, l'option "Mapper l'objet JSON sur" est définie sur TObject (n'a pas de sens pour le type enregistrement).
- Nom du type d'objet racine : le nom de l'entité Delphi la plus externe à laquelle l'objet JSON le plus externe sera mappé.
- Nom du type de tableau racine : facultatif. Le nom de l'entité Delphi qui représentera le tableau des entités “racine”. Si le nom du type de tableau racine n'est pas spécifié, le type d'entité Delphi correspondant n'est pas généré. S'il est spécifié, une entité sera générée comme ceci et comportera une propriété Dataset unique :
[JsonSerialize(jmFields)] TDataArray = class(TPersistent) private FDataset: TArray<TData>; public destructor Destroy; override; property Dataset: TArray<TData> read FDataset write FDataset; End;
Pour finir, cliquez sur le bouton Terminer pour générer le code source.
Règles de mappage
L'expert Liaison de données JSON utilise les règles de mappage des données suivantes :
- L'objet JSON est mappé sur un TObject ou un enregistrement Delphi : le type exact dépend du paramètre Mapper l'objet JSON sur et de la capacité de la bibliothèque JSON à prendre en charge les enregistrements Delphi (la bibliothèque REST.Json ne prend pas en charge les enregistrements).
- Le tableau JSON est mappé sur un TList<T> ou un TArray<T> Delphi : le type exact dépend du paramètre Mapper le tableau JSON sur et de la capacité de la bibliothèque JSON à désérialiser/sérialiser directement le TList<T> Delphi à partir du tableau JSON. La bibliothèque REST.Json ne prend pas en charge TList<T>;. Au lieu d'effectuer un mappage direct, le mappage est effectué sur un objet JSON contenant un tableau imbriqué.
- Le membre d'objet JSON est mappé sur un champ ou une propriété Delphi : le type exact dépend des paramètres Mapper le membre JSON sur et Mapper l'objet JSON sur. Le type propriété n'est pas pris en charge pour le type enregistrement.
- Le type du champ ou de la propriété est deviné après analyse des valeurs dans jusqu'à 1 000 objets lorsque les objets JSON sont collectés dans un tableau JSON. L'expert peut spécifiquement gérer les valeurs date et heure, les TGUID, les booléens, etc.
- Le nom du champ ou de la propriété est identique au nom du membre JSON, lorsque ce dernier est un identificateur Delphi valide. Sinon, le nom est “modifié” pour être un identificateur valide. De plus, les champs sont préfixés par le caractère “F”.
- L'expert effectue la “liaison” de la bibliothèque JSON sélectionnée, en incluant trois éléments :
- Ajoute un attribut à chaque TObject ou type enregistrement, en spécifiant quels membres utiliser dans la sérialisation. Par exemple :
[JsonSerialize(jmAllPubProps)] TCustomer = class(TPersistent)
- Ajoute un attribut à TObject ou aux membres du type enregistrement lorsque son nom est différent du nom du membre JSON. Par exemple :
[JsonName('label')] property label_: string read Flabel_ write Flabel_;
- Ajoute une unité bibliothèque là où les attributs ci-dessus sont déclarés pour la clause uses de l'unité générée. Par exemple :
uses System.Classes, REST.Json.Types;
Comment utiliser les types générés
Les types Delphi générés peuvent être utilisés avec la bibliothèque JSON qui a été choisie dans l'expert. Aucune modification supplémentaire n'est requise. Si le mappage de bibliothèque doit être changé, nous recommandons d'utiliser à nouveau l'expert et de choisir la bibliothèque requise.
Par exemple, lorsque vous utilisez REST.Json, vous obtenez ce code :
// Load JSON data from “s” string into new TData instance
LData := TJson.JsonToObject<TData>(s);
// Serialize TData instance referenced by LData into JSON string
s := TJson.ObjectToJsonString(LData);
Ici, l'option alternative consiste à utiliser la classe générique System.JSON.TJSONMapper, qui est un wrapper fin des bibliothèques JSON existantes. Elle fournit une API simplifiée pour les opérations de sérialisation/désérialisation JSON les plus courantes, même si elle masque les options et les API spécifiques supplémentaires fournies par les bibliothèques. Par exemple :
// Set JSON library to use
TJSONMapper<TData>.SetDefaultLibrary('REST.Json');
// Load JSON data from “s” string into new TData instance
LData := TJSONMapper<TData>.Default.ObjFrom(s);
// Serialize TData instance referenced by LData into JSON string
s := TJSONMapper<TData>.Default.ToString(LData);
Pour de plus amples informations, veuillez consulter System.JSON.TJSONMappers.