Walks a decoded JSON document by a slash-delimited pointer, unescaping ~1 to slash and ~0 to tilde in that order per the RFC, descending arrays by key and objects by property. Empty pointer returns the document, a missing segment throws.

PHP Code Editor

<?php
function jsonPointerGet(array|object $doc, string $pointer): mixed {
if ($pointer === '') {
return $doc;
}
if ($pointer[0] !== '/') {
throw new InvalidArgumentException('Pointer must start with /');
}
$current = $doc;
foreach (explode('/', substr($pointer, 1)) as $rawToken) {
$token = str_replace(['~1', '~0'], ['/', '~'], $rawToken);
if (is_array($current) && array_key_exists($token, $current)) {
$current = $current[$token];
} elseif (is_object($current) && property_exists($current, $token)) {
$current = $current->$token;
} else {
throw new OutOfBoundsException("No value at: $pointer");
}
}
return $current;
}
$doc = json_decode('{"servers":[{"host":"a.example"},{"host":"b.example"}],"a/b":42}', true);
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PHP Version

Execution Result

Ready to execute

Click the "Run Script" button to see the output here