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
JSon.GET('Nom element', VALEUR PAR DEFAUT);
ou
JSon.GET('Nom element');
… mais voir remarque ci-dessous !
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 intéressant d'utiliser ce paramètre pour 3 raisons :
C'est intéressant d'utiliser ce paramètre pour 3 raisons :
- Il évite le déclenchement d'une exception si aucun élément de nom AName n'est trouvé.
- Il définit une valeur que sera retournée si aucun élément de nom AName n'est trouvé.
- 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;
TJSonObject.Find (la sécurité)
Dans l'exemple ci dessous on veut récupéré un eventuel JSonArray dans le JSonObject vJO
.
var vJO: TJSONObject; vJA: TJSonArray; vI: integer; vS: string; begin ... if vJO.Find('dependencies',vJA) then for vI := 0 to vJA.Count - 1 do vS:= vS+vJA.Strings[vI]; ... end;
TJsonObject.Find
fonctionne avec tous ces types :
Function Find(Const AName : String) : TJSONData; overload; Function Find(Const AName : String; AType : TJSONType) : TJSONData; overload; function Find(const key: TJSONStringType; out AValue: TJSONData): boolean; function Find(const key: TJSONStringType; out AValue: TJSONObject): boolean; function Find(const key: TJSONStringType; out AValue: TJSONArray): boolean; function Find(const key: TJSONStringType; out AValue: TJSONString): boolean; function Find(const key: TJSONStringType; out AValue: TJSONBoolean): boolean; function Find(const key: TJSONStringType; out AValue: TJSONNumber): boolean;
Sources & Ressources
Vous pourriez laisser un commentaire si vous étiez connecté.