JSon (tech)
De Wiki1000
(Différences entre les versions)
(Page créée avec « {{Latest}} TJson est un objet technique permettant de manipuler des documents [http://www.json.org/ JSON] ===Propriétés=== {|class="wikitable" |- |[[AsString (TJSon)|A... ») |
(→Opérations) |
||
(13 révisions intermédiaires par 2 utilisateurs sont masquées) | |||
Ligne 1 : | Ligne 1 : | ||
− | {{ | + | {{Version700}} |
TJson est un objet technique permettant de manipuler des documents [http://www.json.org/ JSON] | TJson est un objet technique permettant de manipuler des documents [http://www.json.org/ JSON] | ||
Ligne 7 : | Ligne 7 : | ||
|- | |- | ||
|[[AsString (TJSon)|AsString]] | |[[AsString (TJSon)|AsString]] | ||
− | |Retourne le document sous forme chaîne | + | |Retourne le document sous forme chaîne. |
+ | |- | ||
+ | |[[ReadOnly (TJSon)|ReadOnly]] | ||
+ | |Indique si le document est en lecture seule. | ||
+ | |- | ||
+ | |[[httpResponseCode (TJson)|httpResponseCode]] | ||
+ | |Dernier code de retour HTTP (9.00 patch) | ||
+ | |- | ||
+ | |[[httpResponseText (TJson)|httpResponseText]] | ||
+ | |Dernier valeur de retour HTTP (9.00 patch) | ||
|} | |} | ||
Ligne 13 : | Ligne 22 : | ||
{|class="wikitable" | {|class="wikitable" | ||
|- | |- | ||
− | |[[Create ( | + | |[[Create (TJSon)|Create]] |
− | |Création d'une instance de | + | |Création d'une instance de TJSon. |
|- | |- | ||
− | |[[Assign ( | + | |[[Assign (TJSon)|Assign]] |
− | |Remplace le contenu par le contenu d'un TJSon | + | |Remplace le contenu par le contenu d'un TJSon. |
|- | |- | ||
− | |[[Merge ( | + | |[[Merge (TJSon)|Merge]] |
− | |Ajoute le contenu d'un TJSon | + | |Ajoute le contenu d'un TJSon. |
+ | |- | ||
+ | |[[CopyToClipBoard (TJSon)|CopyToClipBoard]] | ||
+ | |Copie le document dans le presse papier. | ||
+ | |- | ||
+ | |[[Exists (TJSon)|Exists]] | ||
+ | |Teste si un membre existe. | ||
+ | |- | ||
+ | |[[httpGet (TJson)|httpGet]] | ||
+ | |Execution de requête http GET (9.00 patch) | ||
+ | |- | ||
+ | |[[httpPost (TJson)|httpPost]] | ||
+ | |Execution de requête http POST (9.00 patch) | ||
+ | |- | ||
+ | |[[httpPut (TJson)|httpPut]] | ||
+ | |Execution de requête http PUT (9.00 patch) | ||
+ | |- | ||
+ | |[[httpDelete (TJson)|httpDelete]] | ||
+ | |Execution de requête http DELETE (9.00 patch) | ||
+ | |- | ||
+ | |[[getDateFormat (TJson)|getDateFormat]] | ||
+ | |Retourne le format de date par défaut (9.00 patch) | ||
+ | |- | ||
+ | |[[setDateFormat (TJson)|setDateFormat]] | ||
+ | |Positionne le format de date par défaut (9.00 patch) | ||
|} | |} | ||
+ | |||
+ | ===Manipulation d'un document JSon=== | ||
+ | La particularité des documents JSon est que le contrôle de structure est réalisé à l'exécution. ceci permet d'accéder au membre du document directement par la notation pointé. | ||
+ | |||
+ | Par exemple dans l'exemple suivant : | ||
+ | |||
+ | <source lang="Delphi"> | ||
+ | var json:TJSon; email:string; | ||
+ | begin | ||
+ | json := TJSon.Create( | ||
+ | '{ | ||
+ | "employees": [ | ||
+ | { "firstName":"John" , "lastName":"Doe" }, | ||
+ | { "firstName":"Anna" , "lastName":"Smith" }, | ||
+ | { "firstName":"Peter" , "lastName":"Jones" } | ||
+ | ] | ||
+ | }'); | ||
+ | email := json.employees[0].email; | ||
+ | end; | ||
+ | </source> | ||
+ | |||
+ | * On accède directement au tableau "employees" sans déclaration préalable. | ||
+ | * Il ni a pas d'erreur de compilation même si le membre email n'existe pas ou si l'indice dépasse l'étendu du tableau. | ||
+ | |||
+ | Si le document n'est pas en lecture seule il est possible de construire dynamiquement un document JSON. | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | <source lang="Delphi"> | ||
+ | var json:TJSon; idx:Integer; | ||
+ | begin | ||
+ | json := TJSon.Create( | ||
+ | '{ | ||
+ | "employees": [ | ||
+ | { "firstName":"John" , "lastName":"Doe" }, | ||
+ | { "firstName":"Anna" , "lastName":"Smith" }, | ||
+ | { "firstName":"Peter" , "lastName":"Jones" } | ||
+ | ] | ||
+ | }'); | ||
+ | json.ReadOnly := false; | ||
+ | for idx:=0 to json.employees.count-1 do | ||
+ | begin | ||
+ | json.employees[idx].email := Format('%s.%[email protected]',[json.employees[idx].firstName,[son.employees[idx].lastName]); | ||
+ | end; | ||
+ | end; | ||
+ | </source> | ||
+ | |||
+ | * Le membre email des structures employees est créé dynamiquement. | ||
+ | |||
+ | <source lang="Delphi"> | ||
+ | var json:TJSon; | ||
+ | begin | ||
+ | json := TJSon.Create(''); | ||
+ | json.customers[0].Id := CreateGUID; | ||
+ | json.customers[2].Id := CreateGUID; | ||
+ | end; | ||
+ | </source> | ||
+ | |||
+ | * Le tableau "customers" est créé dynamiquement | ||
+ | * La structure associée au ligne du tableau est créée dynamiquement | ||
+ | * Le membre "Id" de créé dynamqiquement | ||
+ | * Le tableau est complété des lignes manquante, ici la ligne 1. | ||
+ | |||
+ | {{tip|Il est recommandé de passer par un variant pour éviter des exceptions de conversions. | ||
+ | |||
+ | <source lang="Delphi"> | ||
+ | var json:TJSon; v : variant; | ||
+ | begin | ||
+ | //... | ||
+ | v := json.employees[idx].email;//email peut exister mais être null ou indéfini | ||
+ | if VarType(v)=varString then | ||
+ | email := VarToStr(v); | ||
+ | |||
+ | end; | ||
+ | </source> | ||
+ | |||
+ | }} | ||
+ | |||
+ | ===Conversion de valeur=== | ||
+ | Lorsqu'une chaîne contenant un json est parsée, certaines valeurs peuvent être converties automatiquement en fonction de leur format. | ||
+ | |||
+ | {|class="wikitable" | ||
+ | |- | ||
+ | !Format de chaine | ||
+ | !Conversion | ||
+ | |- | ||
+ | |true | ||
+ | |boolean (true) | ||
+ | |- | ||
+ | |false | ||
+ | |boolean (false) | ||
+ | |- | ||
+ | |Chaîne au format de date [https://en.wikipedia.org/wiki/ISO_8601 ISO 8601] (ex 2020-02-19T23:00:00.000Z) | ||
+ | |Datetime | ||
+ | |- | ||
+ | |Chaîne numérique contenant une valeur flottante (xx.yy) | ||
+ | |Valeur flottante | ||
+ | |- | ||
+ | |Chaîne numérique contenant une valeur entière (xx) | ||
+ | |Entier | ||
+ | |} | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | <source lang="Delphi"> | ||
+ | var json:TJSon; | ||
+ | begin | ||
+ | json := TJSon.Create('{dt:"2020-02-19T23:00:00.000Z", ft:"123.56"}'); | ||
+ | // | ||
+ | // json.dt is a datetime | ||
+ | // json.ft is a double | ||
+ | end; | ||
+ | </source> | ||
+ | |||
Voir aussi: | Voir aussi: | ||
+ | * [[Json fragment (tech)|Json fragment]] | ||
* [http://www.json.org JSon] | * [http://www.json.org JSon] | ||
− | [[Category: | + | [[Category:Version700]] |
[[Category:Objets_techniques]] | [[Category:Objets_techniques]] | ||
+ | [[Category:Json]] |
Version actuelle en date du 16 juillet 2021 à 08:21
TJson est un objet technique permettant de manipuler des documents JSON
Sommaire |
Propriétés
AsString | Retourne le document sous forme chaîne. |
ReadOnly | Indique si le document est en lecture seule. |
httpResponseCode | Dernier code de retour HTTP (9.00 patch) |
httpResponseText | Dernier valeur de retour HTTP (9.00 patch) |
Opérations
Create | Création d'une instance de TJSon. |
Assign | Remplace le contenu par le contenu d'un TJSon. |
Merge | Ajoute le contenu d'un TJSon. |
CopyToClipBoard | Copie le document dans le presse papier. |
Exists | Teste si un membre existe. |
httpGet | Execution de requête http GET (9.00 patch) |
httpPost | Execution de requête http POST (9.00 patch) |
httpPut | Execution de requête http PUT (9.00 patch) |
httpDelete | Execution de requête http DELETE (9.00 patch) |
getDateFormat | Retourne le format de date par défaut (9.00 patch) |
setDateFormat | Positionne le format de date par défaut (9.00 patch) |
Manipulation d'un document JSon
La particularité des documents JSon est que le contrôle de structure est réalisé à l'exécution. ceci permet d'accéder au membre du document directement par la notation pointé.
Par exemple dans l'exemple suivant :
var json:TJSon; email:string; begin json := TJSon.Create( '{ "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }'); email := json.employees[0].email; end;
- On accède directement au tableau "employees" sans déclaration préalable.
- Il ni a pas d'erreur de compilation même si le membre email n'existe pas ou si l'indice dépasse l'étendu du tableau.
Si le document n'est pas en lecture seule il est possible de construire dynamiquement un document JSON.
Par exemple :
var json:TJSon; idx:Integer; begin json := TJSon.Create( '{ "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }'); json.ReadOnly := false; for idx:=0 to json.employees.count-1 do begin json.employees[idx].email := Format('%s.%[email protected]',[json.employees[idx].firstName,[son.employees[idx].lastName]); end; end;
- Le membre email des structures employees est créé dynamiquement.
var json:TJSon; begin json := TJSon.Create(''); json.customers[0].Id := CreateGUID; json.customers[2].Id := CreateGUID; end;
- Le tableau "customers" est créé dynamiquement
- La structure associée au ligne du tableau est créée dynamiquement
- Le membre "Id" de créé dynamqiquement
- Le tableau est complété des lignes manquante, ici la ligne 1.
Conversion de valeur
Lorsqu'une chaîne contenant un json est parsée, certaines valeurs peuvent être converties automatiquement en fonction de leur format.
Format de chaine | Conversion |
---|---|
true | boolean (true) |
false | boolean (false) |
Chaîne au format de date ISO 8601 (ex 2020-02-19T23:00:00.000Z) | Datetime |
Chaîne numérique contenant une valeur flottante (xx.yy) | Valeur flottante |
Chaîne numérique contenant une valeur entière (xx) | Entier |
Par exemple :
var json:TJSon; begin json := TJSon.Create('{dt:"2020-02-19T23:00:00.000Z", ft:"123.56"}'); // // json.dt is a datetime // json.ft is a double end;
Voir aussi: