JSON

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation de la RTL dans les applications multi-périphériques


JSON (EN) (JavaScript Object Notation) est un format léger d'échange de données indépendant du langage. JSON peut être utilisé comme une alternative aux autres formats d'échange de données tels que XML ou YAML.

RAD Studio fournit des frameworks JSON qui contiennent des classes et des méthodes pour stocker, analyser, lire, écrire et générer des données au format JSON.

Frameworks JSON

RAD Studio fournit différents frameworks pour la gestion des données JSON.

  • Framework d'objets JSON : ce framework crée des objets temporaires pour les opérations de lecture et d'écriture relatives aux données JSON.

Framework d'objets JSON

Le framework d'objets JSON requiert de créer un objet temporaire pour analyser ou générer des données JSON. Pour lire ou écrire des données JSON, vous devez créer un objet mémoire intermédiaire tel que TJSONObject, TJSONArray ou TJSONString avant de lire et d'écrire les données JSON.

Pour de plus amples informations sur ce framework, voir Framework d'objets JSON.

Framework de lecteurs et d'éditeurs JSON

Le framework de lecteurs et d'éditeurs JSON vous permet de lire et d'écrire des données JSON directement dans un flux, sans créer d'objet temporaire. Dans la mesure où vous n'avez pas besoin de créer d'objet temporaire pour les opérations de lecture et d'écriture JSON, ce framework présente de meilleures performances et améliore l'utilisation de la mémoire.

A la différence du framework d'objets JSON, le framework de lecteurs et d'éditeurs JSON fournit une prise en charge du format BSON.

Pour de plus amples informations sur ce framework, voir Framework de lecteurs et d'éditeurs JSON.

Différences relatives au framework JSON

Vous pouvez utiliser l'un ou l'autre des deux frameworks lorsque vous travaillez avec des données JSON. Vous opterez pour l'un ou l'autre selon les besoins de votre projet. Le tableau ci-dessous présente les principales différences entre les deux frameworks JSON.

Framework d'objets JSON
  • Méthode la plus facile pour lire une structure JSON ; il autorise les itérations et les modifications dans l'arborescence de modèle.
Framework de lecteurs et d'éditeurs JSON
  • Effectue les opérations de lecture et d'écriture JSON dans un flux de façon séquentielle, ce qui a pour effet de réduire la consommation de mémoire.
  • Prise en charge BSON.
  • Extensible.

Le tableau ci-dessous comporte trois extraits de code qui illustrent les différences entre les frameworks pour les opérations d'écriture JSON.

Framework d'objets JSON Framework de lecteurs et d'éditeurs JSON : TJSonWriter Framework de lecteurs et d'éditeurs JSON : TJSONObjectBuilder
JSONColor := TJSONObject.Create;
JSONColor.AddPair('name', 'red');
JSONColor.AddPair('hex', '#f00');
JSONArray := TJSONArray.Create;
JSONArray.Add(JSONColor);
JSONObject := TJSONObject.Create;
JSONObject.AddPair('colors', JSONArray);
Writer.WriteStartObject;
Writer.WritePropertyName('colors');
Writer.WriteStartArray;
Writer.WriteStartObject;
Writer.WritePropertyName('name');
Writer.WriteValue('red');
Writer.WritePropertyName('hex');
Writer.WriteValue('#f00');
Writer.WriteEndObject;
Writer.WriteEndArray;
Writer.WriteEndObject;
Builder := TJSONObjectBuilder.Create(Writer);
  Builder
    .BeginObject
      .BeginArray('colors')
        .BeginObject
          .Add('name', 'red')
          .Add('hex', '#f00')
        .EndObject
    .EndArray
  .EndObject;

Les trois extraits de code du tableau ci-dessus écrivent le code JSON suivant :

{
   "colors":[
      {
         "name":"red",
         "hex":"#f00"
      }
   ]
}


Le tableau ci-dessous comporte trois extraits de code qui illustrent les différences entre les frameworks pour les opérations de lecture JSON.

Framework d'objets JSON Framework de lecteurs et d'éditeurs JSON : TJSonReader Framework de lecteurs et d'éditeurs JSON : TJSONIterator
JSONValue := TJSONObject.ParseJSONValue('{"colors":[{"name":"red", "hex":"#f00"}]}');

Memo1.Lines.Add('READER:');
if JSONValue is TJSONArray then
  //... 
else if JSONVAlue is TJSONObject then
  Memo1.Lines.Add('colors');
  Memo1.Lines.Add('name: '+ JSONValue.GetValue<string>('colors[0].name'));
  Memo1.Lines.Add('hex: '+ JSONValue.GetValue<string>('colors[0].hex'));
LStringReader := TStringReader.Create('{"colors":[{"name":"red", "hex":"#f00"}]}');
LJsonTextReader := TJsonTextReader.Create(LStringReader);

while LJsonTextReader.read do
  case LJsonTextReader.TokenType of
    TJsonToken.PropertyName:
    Memo1.Lines.Add(LJsonTextReader.Value.AsString);
	TJsonToken.String:
    Memo1.Lines[Memo1.Lines.Count-1] := Memo1.Lines[Memo1.Lines.Count-1] + ': ' +LJsonTextReader.Value.AsString;
  end;
LStringReader := TStringReader.Create('{"colors":[{"name":"red", "hex":"#f00"}]}');
LJsonTextReader := TJsonTextReader.Create(LStringReader);
LIterator := TJSONIterator.Create(LJsonTextReader);

LIterator.Recurse;
LIterator.Next;
Memo1.Lines.Add(LIterator.Key);
LIterator.Recurse;
LIterator.Recurse;
LIterator.Next;
LIterator.Recurse;
LIterator.Next;
Memo1.Lines.Add(LIterator.Key +': '+ LIterator.AsString);
LIterator.Next;
Memo1.Lines.Add(LIterator.Key +': '+ LIterator.AsString);

Les trois extraits de code du tableau ci-dessus ajoutent ce qui suit à un TMemo.

colors
name: red
hex: #f00

Améliorations relatives à l'analyse et au traitement JSON dans 10.3

  • L'exactitude du code JSON a été améliorée en ce qui concerne le code JSON généré par la classe TJSONValue et ses classes dérivées mais aussi en termes d'analyse. Des améliorations de performances sont également à noter.
  • Nouvelle classe TAsciiStreamWriter : cette classe peut être associée à un TJsonTextWriter pour une génération de chaînes JSON plus performante (peu de conversions).
  • Une sortie JSON "pretty print" grâce à l'introduction de TJSONAncestor.Format(Indentation: Integer = 4). En conséquence, TJSON.Format est désormais obsolète.
  • TJSONAncestor.ToJSON génère maintenant une chaîne JSON valide alors que TJSONAncestor.ToString produit une chaîne JSON similaire, mais sans convertir les symboles non ASCII en \uNNNN.
  • La prise en charge de l'analyse JSON présente un nouveau comportement en cas d'erreurs dans le texte source JSON. Une nouvelle option, TJSONObject.TJSONParseOption.RaiseExc, détermine si la méthode ParseJSONValue déclenche une exception de type EJSONParseException dans le cas d'un code JSON non valide ou renvoie nil (comme c'était le cas auparavant). Si l'exception est activée, TJSONObject.ParseJSONValue renvoie maintenant une position avec une erreur, déclenchant une nouvelle exception System.JSON.EJSONParseException (ayant les propriétés Path, Offset, Line et Position). De même, la méthode TJSONObject.ParseJSONValue contient un troisième nouveau paramètre : RaiseExc, qui remplace le paramètre global provoquant l'exception à déclencher, en cas d'erreurs d'analyse JSON.

Rubriques sur JSON

  • Frameworks JSON :

Voir aussi

Exemples de code