JSON リーダー/ライタ フレームワーク

提供: RAD Studio
移動先: 案内検索

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 クラスは親構造を表します。このクラスは EndObjectEndArray などのメソッドから返されますが、それはこの親が JSON オブジェクトにも JSON 配列にもなれるためです。

上記のクラスのインスタンスを自分で作成する必要はありません。必要なインスタンスは、メソッドを呼び出していく際のメソッド連鎖の中で返されます。

JSON オブジェクトの追加

BeginObject メソッドを使ってオブジェクトを開始します。

Add を呼び出すと、1 つのキーと値のペアを JSON オブジェクトに追加することができます。

AddPairs を呼び出すと、複数のキーと値のペアを JSON オブジェクトに追加することができます。

次のメソッドを呼び出すこともできます。

  • AddNullnull 値を持つキーの追加
  • AddUndefinedundefined 値を持つキーの追加
  • AddMinKeyMinKey 値を持つキーの追加
  • AddMaxKeyMaxKey 値を持つキーの追加

EndObject メソッドを呼び出すとオブジェクトが終了します。

JSON 配列の追加

BeginArray メソッドを使って配列を開始します。

Add を呼び出すと、1 つの値を JSON 配列に追加することができます。

AddElements を呼び出すと、複数の値を JSON 配列に追加することができます。

次のメソッドを呼び出すこともできます。

  • AddNullnull 値の追加
  • AddUndefinedundefined 値の追加
  • AddMinKeyMinKey 値の追加
  • AddMaxKeyMaxKey 値の追加

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 に応じてどのプロパティを使用するかの詳細は、「値プロパティ」の表を参照してください。

関連項目

コード サンプル