BSON

De RAD Studio
Aller à : navigation, rechercher

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;.

Voir aussi