System.JSON.TJSONPathParser
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() {}
};
Sommaire
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
record struct |
public | System.JSON.pas System.JSON.hpp |
System.JSON | System.JSON |
Description
Analyseur d'un chemin JSON.
Un chemin JSON est une chaîne qui définit un chemin vers un élément spécifique avec des données JSON. Un chemin JSON est à JSON ce que XPath (EN) est à XML (EN).
Syntaxe de chemin JSON prise en charge
TJSONPathParser implémente un sous-ensemble de la spécification de chemin JSON définie par Stefan Göessner (EN). Spécifiquement, les éléments pris en charge sont :
- Des opérateurs enfant pour les objets :
- Utilisez
.
pour accéder aux propriétés d'objets dont le nom ne contient pas un point. Par exemple, utiliserroot.child
pour accéder à la propriétéchild
de l'objetroot
. - Utilisez
[]
pour accéder aux propriétés d'objets dont le nom ne contient pas un caractère de délimitation. Par exemple, utilisezroot['child.name']
ouroot["child.name"]
pour accéder à la propriétéchild.name
de l'objetroot
.
- Utilisez
- Opérateur d'index (
[]
) pour les tableaux. Par exemple, utilisezroot[0]
pour accéder au premier élément du tableauroot
.
Ces opérateurs ne prennent pas en charge les expressions spéciales, ils prennent uniquement en charge les valeurs réelles (propriétés d'objets ou index de tableau).
Utilisation de TJSONPathParser
Lorsque vous créez une instance de TJSONPathParser, vous devez transmettre le chemin JSON cible au constructeur.
Lorsque vous avez une instance de TJSONPathParser, appelez NextToken pour parcourir les tokens du chemin JSON spécifié jusqu'à ce que IsEof vaille True
ou que NextToken renvoie un token d'erreur.
Token contient le token renvoyé par le dernier appel à NextToken.
Pour un exemple de code qui montre comment utiliser TJSONPathParser, voir l'implémentation de TJSONIterator.Find.