Framework d'objets JSON
Remonter à JSON
RAD Studio fournit une unité, System.JSON, qui contient des classes et des méthodes pour stocker, analyser et gérer des données au format JSON.
- Remarque : Cette page concerne le Framework d'objets JSON. Pour voir l'autre framework JSON offert par RAD Studio, voir Framework de lecteurs et d'éditeurs JSON.
Le framework d'objets JSON prend en charge tous les types JSON : TJSONObject, TJSONArray, TJSONNumber, TJSONString, TJSONTrue, TJSONFalse, TJSONNull -- tous les descendants de TJSONValue.
Les objets JSON peuvent être instanciés et construits incrémentiellement, ou un flux d'octets peut y être analysé.
Dans l'extrait de code ci-dessous, un objet avec une paire "Hello": "World"
est créé :
var
LJSONObject: TJSONObject;
begin
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair(TJSONPair.Create(TJSONString.Create('Hello'),
TJSONString.Create('World')));
La fonction de classe statique ParseJSONValue ou la fonction Parse peuvent être utilisées pour analyser le flux d'octets dans l'instance de la valeur JSON équivalente.
class function ParseJSONValue(const Data: TBytes; const Offset: Integer): TJSONValue; overload; static;
Par exemple, avec :
const
GJSONString =
'{' +
' "name": {'+
' "A JSON Object": {' +
' "id": "1"' +
' },' +
' "Another JSON Object": {' +
' "id": "2"' +
' }' +
' },' +
' "totalobjects": "2"' +
'}';
vous pouvez transformer la représentation de la chaîne JSON en un JSON par l'utilisation de l'un des extraits de code ci-dessous.
- En utilisant ParseJSONValue :
procedure ConsumeJsonString; var LJSONObject: TJSONObject; begin LJSONObject := nil; try { convert String to JSON } LJSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(GJSONString), 0) as TJSONObject; { output the JSON to console as String } Writeln(LJSONObject.ToString); finally LJSONObject.Free; end;
- En utilisant Parse :
procedure ConsumeJsonBytes; var LJSONObject: TJSONObject; begin LJSONObject := nil; try LJSONObject := TJsonObject.Create; { convert String to JSON } LJSONObject.Parse(BytesOf(GJSONString), 0); { output the JSON to console as String } Writeln(LJSONObject.ToString); finally LJSONObject.Free; end; end;
Les deux extraits de code provoquent l'affichage des données suivantes sur la console :
{"name":{"A JSON Object":{"id":"1"},"Another JSON Object":{"id":"2"}},"totalobjects":"2"}
Cycle de vie
En JSON, l'objet parent est le propriétaire de toutes les valeurs qu'il contient, à moins que la propriété Owned ne soit définie sur False. Dans ce cas, la destruction d'un objet JSON ignore chaque membre ayant l'indicateur défini sur False. Cette fonctionnalité permet la combinaison de divers objets en objets plus gros tout en conservant la possession. Par défaut, la propriété est définie sur True, ce qui signifie que toutes les instances contenues sont possédées par leur parent.
Clonage
Tous les types JSON peuvent être clonés. L'opération de clonage est un clone profond. L'objet cloné possédera toutes les instances JSON.
Les méthodes serveur acceptent tous les types JSON comme paramètres d'entrée, de sortie ou de renvoi, mails elle ne possèdent aucun d'entre eux. Les instances JSON sont libérées après l'exécution de la méthode serveur. Il est possible de lire les objets JSON et de réagir au contenu, mais si davantage de stockage est requis, l'objet doit être cloné.