JSON

Aus RAD Studio
Wechseln zu: Navigation, Suche

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

JSON-Frameworks

RAD Studio enthält verschiedene Frameworks zur Verarbeitung 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
  • Einfachere Möglichkeit zum Lesen einer JSON-Struktur, ermöglicht Iterationen und Änderungen in der Modellhierarchie.
JSON-Framework der Reader und Writer
  • Schreibt JSON-Daten sequenziell in einem Stream bzw. liest sie daraus, wodurch der Speicherbedarf verringert wird.
  • BSON-Unterstützung.
  • Erweiterbar.

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:

Siehe auch

Codebeispiele