JSON リーダー/ライタ フレームワーク
JSON への移動
JSON リーダー/ライタ フレームワークでは、JSON データをストリームに対して読み書きするためのクラスやメソッドが提供されています。
- メモ: RAD Studio には JSON データを管理するための 2 つのフレームワークが用意されています。この 2 つのフレームワークの詳細は「JSON」で説明しています。
JSON リーダー/ライタ フレームワークを使って以下を行うことができます。
- JSON の書き込み: TJSONObjectBuilder クラスを使用して JSON オブジェクトを作成することができます。
TJSONObjectBuilder
クラスは、JSON データをシリアル化するロジックを持つ TJsonWriter クラスのラッパーです。
- JSON オブジェクトの書き込みは
TJSONObjectBuilder
クラスまたはTJsonWriter
クラスを使って行うことが可能ですが、TJSONObjectBuilder
クラスを使用することをお勧めします。JSON オブジェクトを書き込むためのフルーエント インターフェイスが提供されているためです。
- 詳細は、「JSON オブジェクトの書き込み」を参照してください。
- JSON の読み取り: TJSONIterator クラスを使用して JSON データを順に処理することができます。
TJSONIterator
クラスは、JSON 形式でシリアル化されたデータを読み取るための TJsonReader クラスのラッパーです。
- JSON データの読み取りは
TJSONIterator
クラスまたはTJsonReader
クラスを使って行うことが可能ですが、TJSONIterator
クラスを使用することをお勧めします。JSON データ内を移動する追加機能が備わっているためです。
- 詳細は、「JSON オブジェクトの読み取り」を参照してください。
- BSON データの読み書き: このフレームワークでは、TBsonReader クラスおよび TBsonWriter クラスを使用して BSON データを読み書きすることができます。
- 詳細は、「BSON」を参照してください。
目次
JSON オブジェクトの書き込み
JSON オブジェクトを書き込むには System.JSON.Builders フレームワークを使用します。TJSONObjectBuilder
のインスタンスを作成し、BeginObject メソッドを呼び出して JSON オブジェクトを開始する必要があります。TJSONObjectBuilder.BeginObject
メソッドからは TJSONCollectionBuilder.TPairs が返されるので、それを使ってメソッド連鎖を行うことができます。
JSON を書き込むためのメソッド連鎖には、次のクラスが関与します。
- TJSONCollectionBuilder.TPairs: JSON オブジェクトにキーと値のペアを追加するために使用します。
- TJSONCollectionBuilder.TElements: JSON 配列に要素を追加するために使用します。
- TJSONCollectionBuilder.TParentCollection: JSON オブジェクトにキーと値のペアを追加したり、JSON 配列に要素を追加するために使用します。
TParentCollection
クラスは親構造を表します。このクラスはEndObject
やEndArray
などのメソッドから返されますが、それはこの親が JSON オブジェクトにも JSON 配列にもなれるためです。
上記のクラスのインスタンスを自分で作成する必要はありません。必要なインスタンスは、メソッドを呼び出していく際のメソッド連鎖の中で返されます。
JSON オブジェクトの追加
BeginObject
メソッドを使ってオブジェクトを開始します。
Add
を呼び出すと、1 つのキーと値のペアを JSON オブジェクトに追加することができます。
AddPairs
を呼び出すと、複数のキーと値のペアを JSON オブジェクトに追加することができます。
次のメソッドを呼び出すこともできます。
AddNull
:null
値を持つキーの追加AddUndefined
:undefined
値を持つキーの追加AddMinKey
:MinKey
値を持つキーの追加AddMaxKey
:MaxKey
値を持つキーの追加
EndObject
メソッドを呼び出すとオブジェクトが終了します。
JSON 配列の追加
BeginArray
メソッドを使って配列を開始します。
Add
を呼び出すと、1 つの値を JSON 配列に追加することができます。
AddElements
を呼び出すと、複数の値を JSON 配列に追加することができます。
次のメソッドを呼び出すこともできます。
AddNull
:null
値の追加AddUndefined
:undefined
値の追加AddMinKey
:MinKey
値の追加AddMaxKey
:MaxKey
値の追加
EndArray
メソッドを呼び出すと配列が終了します。
JSON オブジェクトおよび JSON 配列の終了
EndObject
または EndArray
を呼び出して、オブジェクトまたは配列を終了することができます。EndAll
を呼び出して、構造全体を一度に終了することもできます。
JSON オブジェクトの読み取り
JSON オブジェクトを読み取るには System.JSON.Builders フレームワークを使用します。
JSON データを含んだ JSON リーダーを指定して TJSONIterator
のインスタンスを作成する必要があります。
Next メソッドを使用して、JSON の最初の項目に移動します。続けて Next
を呼び出していくと、現在の JSON レベルにある次の項目に順に移動することができます。
特定の値やオブジェクトや配列に直接移動するには、移動先の項目の名前を渡して Next
メソッドを呼び出します。この項目は、イテレータがあるのと同じ JSON レベルの構造に含まれていなければなりません。イテレータが配列の中にある場合、配列インデックスを文字列として Next
に渡し、その配列項目に直接移動することができます。Index を使用すると、読み取っている配列の現在のインデックスを取得することができます。配列を読み取っているのでなければ Index
からは -1 が返されます。
Rewind メソッドを使用すると、イテレータを JSON データの先頭に移動することができます。
特定の項目を検索するには、Find メソッドを使用し、検索したい項目のパスを渡します。このメソッドは、その項目が見つかれば True
を返し、イテレータをその項目に移動します。このメソッドでは、異なる JSON レベルに移動することができます。'entities.urls[0].indices[1]'
のようにドット表記を使って項目の完全パスを指定する必要があります。
- メモ: イテレータの作成時に巻き戻すための手続きを指定しなかった場合には、
Rewind
メソッドおよびFind
メソッドで例外が発生します。
異なる JSON レベルへの移動
- 配列またはオブジェクトの構造内への移動
Next
による JSON 内の移動は、JSON の現在のレベル内で行われます。配列やオブジェクトの中に移動するには、種類がStartArray
またはStartObject
である JSON トークンにイテレータを移動する前に Recurse を呼び出し、StartArray
またはStartObject
のトークンに移動するためにNext
を呼び出してその配列またはオブジェクトに入った直後にもう一度Recurse
を呼び出します。
- 配列またはオブジェクトの構造外への移動
- 構造から外に出て親レベルに移動する準備ができたら Return を使用します。このメソッドは、配列またはオブジェクトにまだ内容が残っていてもそれを読み飛ばし、親の配列またはオブジェクトに戻ります。
- Depth を使用すると、イテレータが現在いるレベルの深さを知ることができます。
JSON 項目の読み取り
- キーの読み取り
- Key を使用して現在の項目の名前を読み取ることができます。
Key
は、その時点でイテレータが読み取っている項目の名前を示します。これは、オブジェクト名や、配列名、配列のインデックス、キー/値ペアのキーの名前などの場合があります。
- 値の読み取り
- 値を読み取るには、その値の Type を知っておく必要があります。型に応じた適切なプロパティを使用しなければならないためです。たとえば、型が String である項目の値にアクセスするには、AsString プロパティを使用する必要があります。
- 読み取り対象の値の Type に応じてどのプロパティを使用するかの詳細は、「値プロパティ」の表を参照してください。
関連項目
- JSON オブジェクト フレームワーク
- BSON
- System.JSON.Builders
- System.JSON.Writers
- System.JSON.Readers
- System.JSON.BSON