JSon (tech)

De Wiki1000

version700-32x32.png

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.
Tip-20px.png Tip : Il est recommandé de passer par un variant pour éviter des exceptions de conversions.
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;


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:

Outils personnels