JSON-Pointer

Diese Umsetzung bezieht sich auf RFC6901.

Der ABNF Syntax eines JSON Pointer ist:

  json-pointer    = *( "/" reference-token )
  reference-token = *( unescaped / escaped )
  unescaped       = %x00-2E / %x30-7D / %x7F-10FFFF
    ; %x2F ('/') and %x7E ('~') are excluded from 'unescaped'
  escaped         = "~" ( "0" / "1" )
    ; representing '~' and '/', respectively

Ausgangspunkt ist folgendes Dokument.

{
   "a":[
      {
         "c":1
      }
   ]
}

Wert auslesen

Über die Methode Pointer::getValue() kann ein Wert aus einem Dokument ausgelesen werden. Mit der Methode Pointer::getValueOrDefault() kann noch ein Standardwert angegeben werden. Dieser wird zurückgegeben, insofern der Pointer auf einen nicht vorhandenen Wert zeigt.

Wert setzen

Über Pointer::setValue() kann ein Wert im Dokument gesetzt werden. Fehlende Schlüssel/Werte werden dabei automatisch angelegt.


$doc=(new \Alvine\Json\Decoder)->decode('{"a":[{"c":1}]}');

$pointer=new Pointer('/a/d');

// Wert setzen
$pointer->setValue($doc, 44);
Das Ergebnis ist dann folgendes Dokument

{
   "a":[
      {
         "c":1
      },
      {
         "d":44
      }
   ]
}

Wird als Schlüssel ein Strich - verwendet, so wird ein nummerischer Index verwendet.

(new Pointer('/a/-/d'));

Wert löschen

Mit der Methode Pointer::removeValue($doc) kann ein Wert entfernt werden.

$pointer->removeValue($doc);