JSON
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.
Sommaire
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 de lecteurs et d'éditeurs JSON : ce framework vous permet de lire et d'écrire des données JSON directement.
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 |
|
---|---|
Framework de lecteurs et d'éditeurs JSON |
|
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
Rubriques sur JSON
- Frameworks JSON :