Framework der JSON-Objekte
Nach oben zu JSON
RAD Studio stellt die Unit System.JSON bereit, die Klassen und Methoden zum Speichern, Analysieren und Generieren von Daten im JSON-Format enthält.
- Hinweis: Diese Seite betrifft nur das Framework der JSON-Objekte. Weitere von RAD Studio bereitgestellten JSON-Frameworks finden Sie unter JSON-Framework der Reader und Writer.
Das Framework der JSON-Objekte unterstützt alle JSON-Typen: TJSONObject, TJSONArray, TJSONNumber, TJSONString, TJSONTrue, TJSONFalse, TJSONNull - sind alle Nachkommen von TJSONValue.
JSON-Objekte können instantiiert und inkrementell aufgebaut werden, oder ein Byte-Stream kann in ein JSON-Objekt zerlegt werden.
In dem folgenden Codefragment wird ein Objekt mit einem "Hello": "World"
-Paar erstellt:
var
LJSONObject: TJSONObject;
begin
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair(TJSONPair.Create(TJSONString.Create('Hello'),
TJSONString.Create('World')));
Mit der statischen Klassenfunktion ParseJSONValue oder der Funktion Parse kann der Byte-Stream in die entsprechende JSON-Wertinstanz zerlegt werden.
class function ParseJSONValue(const Data: TBytes; const Offset: Integer): TJSONValue; overload; static;
Zum Beispiel kann die JSON-String-Repräsentation:
const
GJSONString =
'{' +
' "name": {'+
' "A JSON Object": {' +
' "id": "1"' +
' },' +
' "Another JSON Object": {' +
' "id": "2"' +
' }' +
' },' +
' "totalobjects": "2"' +
'}';
mit einem der folgenden Codefragmente in JSON umgewandelt werden.
- Verwenden von ParseJSONValue:
procedure ConsumeJsonString; var LJSONObject: TJSONObject; begin LJSONObject := nil; try { convert String to JSON } LJSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(GJSONString), 0) as TJSONObject; { output the JSON to console as String } Writeln(LJSONObject.ToString); finally LJSONObject.Free; end;
- Verwenden von Parse:
procedure ConsumeJsonBytes; var LJSONObject: TJSONObject; begin LJSONObject := nil; try LJSONObject := TJsonObject.Create; { convert String to JSON } LJSONObject.Parse(BytesOf(GJSONString), 0); { output the JSON to console as String } Writeln(LJSONObject.ToString); finally LJSONObject.Free; end; end;
Beide Codefragmente ergeben folgende Konsolenausgabe:
{"name":{"A JSON Object":{"id":"1"},"Another JSON Object":{"id":"2"}},"totalobjects":"2"}
Lebenszyklus
In JSON ist das übergeordnete Objekt Eigentümer aller Werte, die es enthält, außer deren Eigenschaft Owned ist auf False gesetzt. In diesem Fall werden bei der Freigabe eines JSON-Objekts alle Member übersprungen, deren Flag auf False gesetzt ist. Dadurch wird das Zusammenfügen verschiedener Objekte zu größeren Objekten unter Beibehaltung der Eigentümerschaft möglich. Per Vorgabe ist die Eigenschaft True, das bedeutet, dass alle enthaltenen Instanzen Eigentum des übergeordneten Objekts sind.
Klonen
Alle JSON-Typen können geklont werden. Dabei wird das Verfahren "deep clone" verwendet. Das geklonte Objekt ist Eigentümer aller JSON-Instanzen.
Servermethoden akzeptieren alle JSON-Typen als Eingabe-, Ausgabe- oder Rückgabeparameter. Sie sind aber nicht deren Eigentümer. Die JSON-Instanzen werden nach der Ausführung der Servermethode freigegeben. JSON-Objekte können gelesen werden, und es kann auf deren Inhalt reagiert werden, wenn aber eine weitere Speicherung erforderlich ist, muss das Objekt geklont werden.