JSON オブジェクト フレームワーク
JSON への移動
RAD Studio には、System.JSON というユニットが用意されており、この中に、JSON 形式のデータを格納、解析、生成するためのクラスやメソッドが含まれています。
- メモ: これは、JSON オブジェクト フレームワークについて記述されたページです。RAD Studio が提供するその他の JSON フレームワークを確認するには、「JSON リーダー/ライタ フレームワーク」を参照してください。
JSON オブジェクト フレームワークでは、すべての JSON 型をサポートしています。つまり、TJSONObject、TJSONArray、TJSONNumber、TJSONString、TJSONTrue、TJSONFalse、TJSONNull ですが、これらはすべて TJSONValue の下位型です。
JSON オブジェクトをインスタンス化してインクリメンタルに作成することもできますし、バイト ストリームを解析して JSON オブジェクトにすることもできます。
次のコードでは、"Hello"と "World"
のペアを持つオブジェクトを作成しています。
var
LJSONObject: TJSONObject;
begin
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair(TJSONPair.Create(TJSONString.Create('Hello'),
TJSONString.Create('World')));
静的クラス関数 ParseJSONValue または関数 Parse を使用してバイト ストリームを解析し、同等の JSON 値のインスタンスを作成することができます。
class function ParseJSONValue(const Data: TBytes; const Offset: Integer): TJSONValue; overload; static;
たとえば、次のような文字列があるとします。
const
GJSONString =
'{' +
' "name": {'+
' "A JSON Object": {' +
' "id": "1"' +
' },' +
' "Another JSON Object": {' +
' "id": "2"' +
' }' +
' },' +
' "totalobjects": "2"' +
'}';
この JSON 文字列表現を、次のいずれかのコードで JSON に変換することができます。
- 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;
- 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;
どちらのコードでも、コンソールに次の内容が出力されます。
{"name":{"A JSON Object":{"id":"1"},"Another JSON Object":{"id":"2"}},"totalobjects":"2"}
ライフサイクル
JSON では、親オブジェクトがそのオブジェクトに含まれるすべての値を所有します。ただし、Owned プロパティが False に設定されている場合は除きます。JSON オブジェクトを破棄するときに、このフラグが False に設定されているメンバは除外されます。この機能を使うと、所有権は元のままで、さまざまなオブジェクトを組み合わせて大きいオブジェクトを作成することができます。このプロパティのデフォルト値は True です。つまり、含まれるインスタンスはすべて親が所有することになります。
クローン複製
JSON 型はすべてクローンを作成できます。クローン操作は深いクローンです。複製されたオブジェクトは、すべての JSON インスタンスを所有します。
サーバー メソッドは、すべての JSON 型を入力、出力、リターンのパラメータとして受け取りますが、そのパラメータを所有するわけではありません。JSON インスタンスは、サーバー メソッドの実行が終われば解放されます。JSON オブジェクトを読み取ってその内容を処理することは可能ですが、そこからさらに格納する必要がある場合にはオブジェクトを複製しなければなりません。