BSON
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).
Inhaltsverzeichnis
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;
.