Ceci est une ancienne révision du document !


JSON

Créer un JSON

A partir d'un String

var
   vJD: TJsonData;
begin
   vJD    := GetJSON(AString);
   try
      if assigned(vJD) then { Ok le JSON est valide }
        begin
        ...
        end;
   finally
       vJD.free;
   end;
end;             

Lire une valeur

Get

var
  vJO: TJSonObject;
begin
   FBigEndian:=vJO.Get('bendian',false);
end;        

Fonctionne sur :

fpjson.pp
    Function Get(Const AName : String) : Variant;
    Function Get(Const AName : String; ADefault : TJSONFloat) : TJSONFloat;
    Function Get(Const AName : String; ADefault : Integer) : Integer;
    Function Get(Const AName : String; ADefault : Int64) : Int64;
    Function Get(Const AName : String; ADefault : QWord) : QWord;
    Function Get(Const AName : String; ADefault : Boolean) : Boolean;
    Function Get(Const AName : String; ADefault : TJSONStringType) : TJSONStringType;
    Function Get(Const AName : String; ADefault : TJSONUnicodeStringType) : TJSONUnicodeStringType;
    Function Get(Const AName : String; ADefault : TJSONArray) : TJSONArray;
    Function Get(Const AName : String; ADefault : TJSONObject) : TJSONObject;
Remarquez que chaque Function Get peut prendre un paramètre ADefault. C'est interessant d'utiliser ce parametre pour 3 raisons :
  1. Il évite le déclenchement d'une exception si aucun élément de nom AName n'est trouvé.
  2. Il définit une valeur que sera retournée si aucun élément de nom AName n'est trouvé.
  3. Il permet de savoir quel Get on utilisera en fonction de son type.
    Cela evite d'appeler le Get générique qui passe par les Variants

FindPath

Pour récuperer le JSONArray version dans le JSON suivant :

{
  "json_format_version": [
    1,
    0
  ],
  "smartctl": {
    "version": [
      7,
      2
    ],
    "svn_revision": "5155",
    "build_info": "(sf-7.2-1)",
    "exit_status": 0
  }
}

On peut utiliser le code ci-dessous (TJsonData.FindPath):

 vJSA:=TJSONArray(OutJSON.FindPath('smartctl.version'));

Pour avoir seulement le 7 :

var
   vJD: TJSonData;
...
  vJD:= OutJSON.FindPath('smartctl.version[0]');
  if assigned(vJD) then Result:=vJD.AsString;  

Sources & Ressources

Vous pourriez laisser un commentaire si vous étiez connecté.