System.JSON.Builders.TJSONIterator
Delphi
TJSONIterator = class
C++
class PASCALIMPLEMENTATION TJSONIterator : public System::TObject
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
class | public | System.JSON.Builders.pas System.JSON.Builders.hpp |
System.JSON.Builders | System.JSON.Builders |
説明
JSON リーダーによって提供される内容を反復処理することができます。
イテレータは JSON リーダーと似ていますが、いくつか追加の機能があり、動作が少し異なります。たとえば次のような点です。
- イテレータではすべてのトークンをたどる必要がありません。配列やオブジェクトの特定の項目に進んだり、配列やオブジェクトの一部を読み飛ばしたり、配列やオブジェクトの全体を読み飛ばすことができます。
- イテレータが配列やオブジェクトの値のトークンを指している場合、その値に一致する配列インデックスまたはオブジェクト キーを読み取ることができます。その情報を別に管理する必要がありません。
- イテレータはオブジェクト キーで停止しません。停止するのではなく、キーを読み飛ばして、それに対応する値のトークンまで移動します。値のトークンのキーは、イテレータの Key プロパティから読み取ることができます。
入力データの反復処理
入力 JSON リーダーの内容を反復処理するには:
- JSON リーダーのデータを読み取る JSON イテレータを作成します。
- Next を呼び出して、入力データの最初の JSON トークンにリーダーを移動します。
- Next を繰り返し呼び出すと、入力データのすべての JSON トークンをたどることができます。入力データの末尾に到達すると、Next は
False
を返します。
Rewind を使用すると、入力データの先頭にイテレータを戻すことができます。
値プロパティ
TJSONIterator にはいくつかのプロパティが用意されていて、それを読み取ることで、イテレータの現在のトークンの値を取得することができます。Type プロパティの値によって、値を読み取るために使用するプロパティが決まります。
以下の表に、Type プロパティの値と、現在のトークンの値を読み取るために使用する TJSONIterator のプロパティを示します。
Type の値 | TJSONIterator のプロパティ |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
現在のトークンが他の形式である場合にその値にアクセスするには、AsValue や AsVariant を使用することができます。
再帰の使用
TJSONIterator は、デフォルトでは、浅い反復処理を行うイテレータです。イテレータが配列やオブジェクトの全体を読み飛ばさないようにするには、種類が TJsonToken.StartObject
または TJsonToken.StartObject
のトークンに到達するたびに、Recurse を呼び出してから Next を呼び出す必要があります。
再帰処理中に Return を使用すると、現在の配列またはオブジェクトの残りの内容を読み飛ばして、イテレータを配列またはオブジェクトの親に戻すことができます。
入力 JSON リーダーの反復処理を開始したときには、再帰の深さを示す Depth の値は 0 です。再帰処理で配列またはオブジェクトに入るたびに、この値は 1 だけ増えます。末尾に達するか Return を使って末尾まで読み飛ばすことで配列またはオブジェクトから離れると、この値は 1 だけ減ります。InRecurse は、イテレータの再帰の深さの値が 0 より大きいかどうかを示します。
ParentType は、現在のトークンの親の種類を示します(TJsonToken.StartObject
または TJsonToken.StartObject
)。深さが 0 であれば、ParentType は TJsonToken.None
です。
特定のデータが存在するかどうかの確認
Find を使用すると、入力 JSON リーダーの内容に、指定した JSON パスと一致するデータが含まれているかどうかを判断することができます。