JSON
{{Parent|Verwenden der RTL in geräteübergreifenden Anwendungen}
JSON (JavaScript Object Notation) ist ein sprachunabhängiges, schlankes Datenaustauschformat. JSON kann als Alternative für andere Datenaustauschformate wie XML oder YAML verwendet werden.
RAD Studio stellt die JSON-Frameworks bereit, die Klassen und Methoden zum Speichern, Analysieren, Lesen, Schreiben und Generieren von Daten im JSON-Format enthalten.
Inhaltsverzeichnis
JSON-Frameworks
RAD Studio enthält verschiedene Frameworks zur Verarbeitung von JSON-Daten.
- Framework der JSON-Objekte: Dieses Framework erstellt temporäre Objekte zum Lesen und Schreiben von JSON-Daten.
- JSON-Framework der Reader und Writer: Dieses Framework ermöglicht das direkte Lesen und Schreiben von JSON-Daten.
Framework der JSON-Objekte
Das Framework der JSON-Objekte erfordert, dass Sie ein temporäres Objekt zum Analysieren oder Generieren von JSON-Daten erstellen. Um JSON-Daten zu lesen oder zu schreiben, müssen Sie vor dem Lesen oder Schreiben von JSON-Daten ein Zwischenspeicherobjekt, wie TJSONObject, TJSONArray oder TJSONString, erstellen.
Weitere Einzelheiten zu diesem Framework finden Sie unter Framework der JSON-Objekte.
JSON-Framework der Reader und Writer
Mit dem JSON-Framework der Reader und Writer können Sie JSON-Daten direkt in einen Stream schreiben bzw. daraus lesen, ohne dass Sie ein temporäres Objekt erstellen müssen. Da Sie zum Lesen und Schreiben von JSON kein temporäres Objekt erstellen müssen, bietet dieses Framework eine bessere Leistung und verringert den Speicherbedarf.
Im Gegensatz zum Framework der JSON-Objekte stellt das JSON-Framework der Reader und Writer Unterstützung für BSON bereit.
Weitere Einzelheiten zu diesem Framework finden Sie unter JSON-Framework der Reader und Writer.
Unterschiede zwischen den JSON-Frameworks
Beide Frameworks sind für die Arbeit mit JSON-Daten geeignet. Sie können je nach den Anforderungen des Projekts das eine oder das andere Framework verwenden. Die folgende Tabelle enthält einige der Hauptunterschiede zwischen den beiden JSON-Frameworks.
Framework der JSON-Objekte |
|
---|---|
JSON-Framework der Reader und Writer |
|
Die folgende Tabelle enthält drei Codefragmente, die die Unterschiede zwischen den beiden Frameworks beim Schreiben von JSON-Daten illustrieren.
Framework der JSON-Objekte | JSON-Framework der Reader und Writer: TJSonWriter | JSON-Framework der Reader und Writer: 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;
|
Die drei Codefragmente aus der obigen Tabellen schreiben die folgenden JSON-Daten:
{
"colors":[
{
"name":"red",
"hex":"#f00"
}
]
}
Die folgende Tabelle enthält drei Codefragmente, die die Unterschiede zwischen den beiden Frameworks beim Lesen von JSON-Daten illustrieren.
Framework der JSON-Objekte | JSON-Framework der Reader und Writer: TJSonReader | JSON-Framework der Reader und Writer: 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);
|
Die drei Codefragmente aus der obigen Tabellen fügen einem TMemo Folgendes hinzu.
colors name: red hex: #f00
JSON-Themen
- JSON-Frameworks: