This is an implementation of JSON Pointer written in PHP. Triggered by @janl's node.js implementation and being a bit bored.
$ composer require softinvest/php-jsonpointer
Now you can use JSON Pointer for PHP via the available Composer autoload file.
<?php require_once 'vendor/autoload.php';
use SoftInvest\Json\Pointer;
use SoftInvest\Json\Pointer\InvalidJsonException;
use SoftInvest\Json\Pointer\NonexistentValueReferencedException;
$invalidJson = '{"Missing colon" null}';
try {
$jsonPointer = new Pointer($invalidJson);
} catch (InvalidJsonException $e) {
$message = $e->getMessage(); // Cannot operate on invalid Json. Message: Parse error on line 1: ...
}
$json = '{"foo":1,"bar":{"baz":2},"qux":[3,4,5],"m~n":8,"a/b":0,"e^f":3}';
$jsonPointer = new Pointer($json);
try {
$all = $jsonPointer->get(""); // string('{"foo":1,"bar":{"baz":2},"qux":[3,4,5],"m~n":8,"a/b":0,"e^f":3}')
$one = $jsonPointer->get("/foo"); // int(1)
$two = $jsonPointer->get("/bar/baz"); // int(2)
$three = $jsonPointer->get("/qux/0"); // int(3)
$four = $jsonPointer->get("/qux/1"); // int(4)
$five = $jsonPointer->get("/qux/-"); // int(5)
$five = $jsonPointer->get("/qux/" . Pointer::LAST_ARRAY_ELEMENT_CHAR); // int(5)
$zero = $jsonPointer->get("/a~1b"); // int(0)
$eight = $jsonPointer->get("/m~0n"); // int(8)
$three = $jsonPointer->get("/e^f"); // int(3)
$nonexistent = $jsonPointer->get("/qux/7");
} catch (NonexistentValueReferencedException $e) {
$message = $e->getMessage(); // Json Pointer '/qux/7' reference a nonexistent value
}
$ composer test
This library is licensed under the MIT License. Please see LICENSE for more information.
Please see CHANGELOG for more information.
Please see CONTRIBUTING for more information.