Zum Hauptinhalt springen

4. Evaluation (Auswertung)

4. Evaluation (Auswertung)

Die Auswertung eines JSON Pointers beginnt mit einer Referenz auf den Wurzelwert (root value) eines JSON-Dokuments und endet mit einer Referenz auf einen Wert innerhalb des Dokuments. Jedes Referenz-Token (reference token) im JSON Pointer wird sequenziell ausgewertet.

Die Auswertung jedes Referenz-Tokens beginnt mit der Dekodierung jeglicher maskierter Zeichensequenzen (escaped character sequence). Dies wird durchgeführt, indem zunächst jedes Vorkommen der Sequenz '~1' in '/' umgewandelt wird und anschließend jedes Vorkommen der Sequenz '0' in '' umgewandelt wird. Durch die Durchführung der Substitutionen in dieser Reihenfolge vermeidet eine Implementierung den Fehler, '~01' zuerst in '~1' und dann in '/' umzuwandeln, was falsch wäre (die Zeichenkette '~01' wird nach der Transformation korrekt zu '~1').

Das Referenz-Token modifiziert dann gemäß dem folgenden Schema, welcher Wert referenziert wird:

  • Wenn der aktuell referenzierte Wert ein JSON-Objekt (object) ist, ist der neue referenzierte Wert das Objektmitglied (object member) mit dem durch das Referenz-Token identifizierten Namen. Der Mitgliedsname (member name) ist gleich dem Token, wenn und nur wenn er die gleiche Anzahl von Unicode-Zeichen wie das Token hat und ihre Codepunkte (code points) byteweise gleich sind. Es wird keine Unicode-Zeichennormalisierung (character normalization) durchgeführt. Wenn ein referenzierter Mitgliedsname in einem Objekt nicht eindeutig ist, ist das referenzierte Mitglied undefiniert und die Auswertung schlägt fehl (siehe unten).

  • Wenn der aktuell referenzierte Wert ein JSON-Array (array) ist, MUSS das Referenz-Token entweder enthalten:

    • Zeichen, die aus Ziffern (digits) bestehen (siehe ABNF unten; beachten Sie, dass führende Nullen nicht erlaubt sind), die einen vorzeichenlosen Basis-10-Ganzzahlwert darstellen, wodurch der neue referenzierte Wert das Array-Element mit dem durch das Token identifizierten nullbasierten Index (zero-based index) wird, oder
    • genau das einzelne Zeichen "-", wodurch der neue referenzierte Wert das (nicht existierende) Mitglied nach dem letzten Array-Element wird.

Die ABNF-Syntax für Array-Indizes lautet:

array-index = %x30 / ( %x31-39 *(%x30-39) )
; "0", or digits without a leading "0"

Implementierungen werden jedes Referenz-Token gegen den Inhalt des Dokuments auswerten und einen Fehlerzustand (error condition) auslösen, wenn sie für eines der Referenz-Tokens des JSON Pointers keinen konkreten Wert (concrete value) auflösen können. Beispielsweise wird ein Fehlerzustand ausgelöst, wenn ein Array mit einem nicht-numerischen Token referenziert wird. Siehe Section 7 für Details.

Beachten Sie, dass die Verwendung des Zeichens "-" zur Indizierung eines Arrays immer zu einem solchen Fehlerzustand führt, da es per Definition auf ein nicht existierendes Array-Element verweist. Daher müssen Anwendungen von JSON Pointer spezifizieren, wie dieses Zeichen behandelt werden soll, damit es nützlich ist.

Jeder Fehlerzustand, für den keine spezifische Aktion durch die JSON Pointer-Anwendung definiert ist, führt zur Beendigung der Auswertung.