BSON

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Verwenden der RTL in geräteübergreifenden Anwendungen


BSON (EN) (Binary JSON) ist ein offener Standard für die Codierung oder die Darstellung von JSON-ähnlichen Dokumenten in einem Binärformat. RAD Studio enthält die Unit System.JSON.BSON mit Klassen und Methoden für die Serialisierung/Deserialisierung von BSON.

Alle BSON-Typen werden unterstützt. Weitere Informationen über die verschiedenen Typen finden Sie unter System.JSON.BSON.TBsonType und auf der offiziellen Website BSON Official Site (EN).

BSON-Framework

RAD Studio enthält ab der Seattle-Version eine neue API für die Arbeit mit BSON-Daten.

Das neue Framework umfasst Klassen zum Lesen und Schreiben von BSON-Daten, TBsonReader bzw. TBsonWriter.

Mit TBsonWriter serialisieren Sie JSON-Text in BSON. Mit der Methode WriteToken können Sie durch das JSON-Objekt iterieren, um Token für Token zu serialisieren.

Mit TBsonReader lesen Sie BSON-Daten und deserialisieren BSON in JSON- oder andere Formate.

Schreiben von BSON

Das folgende JSON-Objekt wird in dem Codefragment verwendet:

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

So erstellen Sie ein BSON-Dokument direkt:

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;

Das folgende BSON-Dokument ist das Ergebnis des Schreibens des angegebenen JSON-Objekts mit einem BSON-Writer in hexadezimaler Notation:

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

Mit der folgenden Funktion können Sie eine hexadezimale Darstellung des BSON-Dokuments erstellen:

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;

Von JSON in BSON

Das folgende JSON-Objekt wird in dem Codefragment verwendet:

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

Für die Serialisierung eines JSON-Objekts in BSON.

Das JSON-Objekt wird in ein TMemo kopiert.

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;

Das folgende BSON-Dokument ist das Ergebnis der Serialisierung des angegebenen JSON-Objekts in hexadezimaler Notation:

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
Hinweis: Hier die Funktionsdefinition: function Bytes2String(const ABytes: TBytes): string;.

Siehe auch