Framework d'objets JSON

De RAD Studio
Aller à : navigation, rechercher

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.

  1. 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;
    
  2. 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é.

Voir aussi