BSON
Remonter à Utilisation de la RTL dans les applications multi-périphériques
BSON (EN) (Binary JSON) est un standard ouvert utilisé pour l'encodage ou la représentation en binaire de documents ayant un format similaire à JSON. RAD Studio fournit une unité, System.JSON.BSON, qui contient des classes et des méthodes pour sérialiser et désérialiser des données BSON.
Tous les types BSON sont pris en charge. Pour de plus amples informations sur les différents types, voir System.JSON.BSON.TBsonType ainsi que le site officiel : BSON Official Site (EN).
Le framework BSON
Depuis Seattle et les versions ultérieures, RAD Studio inclut une nouvelle API permettant de manipuler les données BSON.
Le nouveau framework comprend des classes utilisées pour la lecture et l'écriture des données BSON, respectivement TBsonReader et TBsonWriter.
Utilisez TBsonWriter pour sérialiser du texte JSON en BSON. Utilisez la méthode WriteToken pour parcourir l'objet JSON, et effectuer une sérialisation token par token.
Utilisez TBsonReader pour lire des données BSON et désérialiser des données BSON en JSON ou vers d'autres formats.
Ecriture de données BSON
L'objet JSON suivant est utilisé dans l'extrait de code fourni :
{
"colors": [
{
"name": "red",
"hex": "#f00"
}
]
}
Pour créer un document BSON directement :
uses
System.JSON.BSON,
System.JSON.Writers,
System.JSON.Builders;
procedure BSONWriterSample;
var
Builder: TJSONObjectBuilder; //To use the built-in JSON builder
BytesStream: TBytesStream; //To create the BSON document as a byte stream
Writer: TBsonWriter; //A BSON writer
Bytes: TBytes; //To contain the bytes from the byte stream
begin
BytesStream := TBytesStream.Create;
Writer := TBsonWriter.Create(BytesStream);
Builder := TJSONObjectBuilder.Create(Writer);
try
Builder
.BeginObject
.BeginArray('colors')
.BeginObject
.Add('name','red')
.Add('hex','#f00')
.EndAll;
Bytes := BytesStream.Bytes;
SetLength(Bytes, BytesStream.Size); //Bytes contains the BSON document.
Memo1.text := Bytes2String(Bytes); //To see the representation of the BSON document in a TMemo, passing the Bytes var that contains the BSON document.
finally
BytesStream.free;
Writer.free;
Builder.free;
end;
end;
Le document BSON suivant est le résultat de l'écriture de l'objet JSON fourni en utilisant un créateur BSON, représenté en notation hexadécimale :
36-00-00-00-04-63-6F-6C-6F-72-73-00-29-00-00-00-03-30-00-21-00-00-00-02-6E-61-6D-65-00-04-00-00-00-72-65-64-00-02-68-65-78-00-05-00-00-00-23-66-30-30-00-00-00-00
Pour voir une représentation hexadécimale du document BSON, vous pouvez utiliser la fonction suivante :
function Bytes2String(const ABytes: TBytes): string;
var
I: Integer;
begin
Result := '';
for I := Low(ABytes) to High(ABytes) do
if I = 0 then
Result := IntToHex(ABytes[I], 2)
else
Result := Result + '-' + IntToHex(ABytes[I], 2);
end;
De JSON vers BSON
L'objet JSON suivant est utilisé dans l'extrait de code fourni :
{
"colors": [
{
"name": "red",
"hex": "#f00"
}
]
}
Pour sérialiser un objet JSON vers BSON.
L'objet JSON est copié dans un TMemo.
uses
System.JSON.BSON,
System.JSON.Writers,
System.JSON.Readers,
System.JSON.Builders;
procedure JSONtoBSON;
var
SR: TStringReader; //A String Reader
JsonReader: TJsonTextReader; //A JSON text Reader
BsonWriter: TBsonWriter; // A BSON writer
Stream: TBytesStream; //To create the BSON document as a byte stream
Bytes: TBytes; //To contain the bytes from the byte stream
begin
SR := TStringReader.Create(Memo1.Text); //It gets the JSON object as a string from a TMemo.
JsonReader := TJsonTextReader.Create(SR);
Stream := TBytesStream.Create;
BsonWriter := TBsonWriter.Create(Stream);
try
BsonWriter.WriteToken(JsonReader); //It gets the JSON object as an argument and analize the object token by token.
Stream.Position := 0;
Bytes := Stream.Bytes;
SetLength(Bytes, Stream.Size);
Memo2.Text := Bytes2String(Bytes); //It shows the String representation of the BSON document in a TMemo.
finally
SR.free;
JsonReader.free;
Stream.free;
BsonWriter.free;
end;
end;
Le document BSON suivant est le résultat de la sérialisation en notation hexadécimale de l'objet JSON fourni :
36-00-00-00-04-63-6F-6C-6F-72-73-00-29-00-00-00-03-30-00-21-00-00-00-02-6E-61-6D-65-00-04-00-00-00-72-65-64-00-02-68-65-78-00-05-00-00-00-23-66-30-30-00-00-00-00
- Remarque : Voir ci-dessous la définition de la fonction :
function Bytes2String(const ABytes: TBytes): string;
.