System.JSON.TJSONPathParser

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

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() {}
};

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
record
struct
public
System.JSON.pas
System.JSON.hpp
System.JSON System.JSON


Beschreibung

Parser eines JSON-Pfads.

Ein JSON-Pfad ist ein String, der einen Pfad zu einem angegebenen Element innerhalb von JSON-Daten festlegt. Ein JSON-Pfad ist für JSON, was XPath (EN) für XML ist.

Unterstützte Syntax für JSON-Pfade

TJSONPathParser implementiert eine Untermenge der von Stefan Gössner definierten JSON-Pfad-Spezifikation (JSON path specification defined by Stefan Gössner (EN)). Ausdrücklich unterstützte Elemente sind:

  • Untergeordnete Operatoren für Objekte:
    • Verwenden Sie ., um auf Objekteigenschaften zu zugreifen, die keinen Punkt in ihren Namen enthalten. Verwenden Sie beispielsweise root.child, um auf die Eigenschaft child des Objekts root zu zugreifen.
    • Verwenden Sie [], um auf Objekteigenschaften zu zugreifen, die Anführungszeichen in ihren Namen enthalten. Verwenden Sie beispielsweise root['child.name'] oder root["child.name"], um auf die Eigenschaft child.name des Objekts root zu zugreifen.
  • Indizierungsoperator ([]) für Arrays. Verwenden Sie beispielsweise root[0], um auf das erste Element des Arrays root zu zugreifen.

Diese Operatoren unterstützen keine speziellen Ausdrücke, sondern nur tatsächliche Werte (Objekteigenschaften oder Array-Index).

Verwenden von TJSONPathParser

Beim Erstellen einer Instanz von TJSONPathParser müssen Sie den Ziel-JSON-Pfad an den Konstruktor übergeben.

Rufen Sie nach dem Erstellen einer Instanz von TJSONPathParser NextToken auf, um durch die Token des angegebenen JSON-Pfads zu iterieren, bis IsEof True ist oder NextToken ein Error-Token zurückgibt.

Token enthält das Token, das vom letzten Aufruf von NextToken zurückgegeben wurde.

Ein Codebeispiel zur Verwendung von TJSONPathParser finden Sie bei der Implementierung von TJSONIterator.Find.

Siehe auch