System.JSON.TJSONPathParser

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

Delphi

  TJSONPathParser = record
  public type
    TToken = (Undefined, Name, ArrayIndex, Eof, Error);
  private
    FPathPtr: PChar;
    FPtr: PChar;
    FEndPtr: PChar;
    FTokenArrayIndex: Integer;
    FTokenName: string;
    FToken: TToken;
    function GetIsEof: Boolean; inline;
    procedure RaiseError(AMsg: PResStringRec);
    procedure RaiseErrorFmt(AMsg: PResStringRec; const AParams: array of const);
    procedure ParseName;
    procedure ParseQuotedName(AQuote: Char);
    procedure ParseArrayIndex;
    procedure ParseIndexer;
    function EnsureLength(ALength: Integer): Boolean; inline;
    procedure FrontTrim(var APtr: PChar); inline;
    procedure BackTrim(var APtr: PChar); inline;
  public
    constructor Create(const APath: string); overload;
    constructor Create(const APathPtr: PChar; ALen: Integer); overload;
    function NextToken: TToken;
    property IsEof: Boolean read GetIsEof;
    property Token: TToken read FToken;
    property TokenName: string read FTokenName;
    property TokenArrayIndex: Integer read FTokenArrayIndex;
  end;

C++

struct DECLSPEC_DRECORD TJSONPathParser
{
public:
    enum class DECLSPEC_DENUM TToken : unsigned char { Undefined, Name, ArrayIndex, Eof, Error };
private:
    System::WideChar *FPathPtr;
    System::WideChar *FPtr;
    System::WideChar *FEndPtr;
    int FTokenArrayIndex;
    System::UnicodeString FTokenName;
    TToken FToken;
    bool __fastcall GetIsEof();
    void __fastcall RaiseError(System::PResStringRec AMsg);
    void __fastcall RaiseErrorFmt(System::PResStringRec AMsg, const System::TVarRec *AParams, const int AParams_High);
    void __fastcall ParseName();
    void __fastcall ParseQuotedName(System::WideChar AQuote);
    void __fastcall ParseArrayIndex();
    void __fastcall ParseIndexer();
    bool __fastcall EnsureLength(int ALength);
    void __fastcall FrontTrim(System::WideChar * &APtr);
    void __fastcall BackTrim(System::WideChar * &APtr);
public:
    __fastcall TJSONPathParser(const System::UnicodeString APath)/* overload */;
    __fastcall TJSONPathParser(const System::WideChar * APathPtr, int ALen)/* overload */;
    TToken __fastcall NextToken();
    __property bool IsEof = {read=GetIsEof};
    __property TToken Token = {read=FToken};
    __property System::UnicodeString TokenName = {read=FTokenName};
    __property int TokenArrayIndex = {read=FTokenArrayIndex};
    TJSONPathParser() {}
};

プロパティ

種類 可視性 ソース ユニット
record
struct
public
System.JSON.pas
System.JSON.hpp
System.JSON System.JSON


説明

JSON パスのパーサーです。

JSON パスとは、JSON データ内の特定の項目のパスを定義した文字列です。JSON の JSON パスは、XMLXPath のようなものです。

サポートされている JSON パス構文

TJSONPathParser は、Stefan Göessner によって定義された JSON パス仕様のサブセットを実装しています。特に、サポートされている要素は次のとおりです:

  • オブジェクトの子演算子:
    • . を使用すると、名前にドットを含んでいないオブジェクトのプロパティにアクセスすることができます。たとえば、root.child を使用すると、root オブジェクトの child プロパティにアクセスすることができます。
    • . を使用すると、名前に引用文字を含んでいるオブジェクトのプロパティにアクセスすることができます。 たとえば、root['child.name']root["child.name"] を使用すると、root オブジェクトの child.name プロパティにアクセスすることができます。
  • 配列の添字演算子([])。たとえば、root[0] を使用すると、root 配列の最初の項目にアクセスすることができます。

これらの演算子では特別な式をサポートしていません。サポートしているのは実際の値(オブジェクトのプロパティや配列のインデックス)だけです。

TJSONPathParser の使い方

TJSONPathParser のインスタンスを作成するときに、対象の JSON パスをコンストラクタに渡す必要があります。

TJSONPathParser のインスタンスを作成したら、NextToken を呼び出して、IsEofTrue になるか NextTokenError トークンを返すまで、指定された JSON パスのトークンを反復処理します。

NextToken は、次のトークンのいずれも返すことができます。

トークン 説明

ArrayIndex

JSON パス内の次のトークンは、JSON 配列項目のインデックスです。 TokenArrayIndex は、ターゲットのインデックスを保有します。

Name

JSON パス内の次のトークンは、JSON オブジェクトキー/値ペアのキーです。 TokenName には、ターゲットのキーが含まれています。

Eof

JSON パスの最後に到達しました。

パスの走査を続行することはできません。TJSONPathParser のこのインスタンスに NextToken をもう一度呼び出すと、例外が発生します。

Error

指定された JSON パスにエラーがあります。

パスの走査を続行することはできません。TJSONPathParser のこのインスタンスに NextToken をもう一度呼び出すと、例外が発生します。

Token には、最後に NextToken を呼び出したときに返されたトークンが含まれています。

TJSONPathParser の使い方を示すコード例は、TJSONIterator.Find の実装を参照してください。

関連項目