json-pointer
Provides JSON pointer as a value object.
Installation
Run
composer require ergebnis/json-pointer
Usage
ReferenceToken
You can create a ReferenceToken from a string value:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$referenceToken = Pointer\ReferenceToken::fromString('foo/9000/😆');
$referenceToken->toJsonString(); // 'foo~19000~😆'
$referenceToken->toString(); // 'foo/9000/😆'
$referenceToken->toUriFragmentIdentifierString(); // 'foo~19000~1%F0%9F%98%86'
You can create a ReferenceToken from a JSON string value:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$referenceToken = Pointer\ReferenceToken::fromJsonString('foo~19000~😆');
$referenceToken->toJsonString(); // 'foo~19000~😆'
$referenceToken->toString(); // 'foo/9000/😆'
$referenceToken->toUriFragmentIdentifierString(); // 'foo~19000~1%F0%9F%98%86'
You can create a ReferenceToken from a URI fragment identifier string value:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$referenceToken = Pointer\ReferenceToken::fromUriFragmentIdentifierString('foo~19000~1%F0%9F%98%86');
$referenceToken->toJsonString(); // 'foo~19000~😆'
$referenceToken->toString(); // 'foo/9000/😆'
$referenceToken->toUriFragmentIdentifierString(); // 'foo~19000~1%F0%9F%98%86'
You can create a ReferenceToken from an int value:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$referenceToken = Pointer\ReferenceToken::fromInt(9001);
$referenceToken->toJsonString(); // '9001'
$referenceToken->toString(); // '9001'
$referenceToken->toUriFragmentIdentifierString(); // '9001'
You can compare ReferenceTokens:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$one = Pointer\ReferenceToken::fromString('foo/bar');
$two = Pointer\ReferenceToken::fromJsonString('foo~1bar');
$three = Pointer\ReferenceToken::fromString('foo/9000');
$one->equals($two); // true
$one->equals($three); // false
JsonPointer
You can create a JsonPointer referencing a document:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$jsonPointer = Pointer\JsonPointer::document();
$jsonPointer->toJsonString(); // ''
$jsonPointer->toUriFragmentIdentifierString(); // '#'
You can create a JsonPointer from a JSON string representation value:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$jsonPointer = Pointer\JsonPointer::fromJsonString('/foo/bar/😆');
$jsonPointer->toJsonString(); // '/foo/bar/😆'
$jsonPointer->toUriFragmentIdentifierString(); // '#/foo/bar/%F0%9F%98%86'
You can create a JsonPointer from a URI fragment identifier string representation value:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$jsonPointer = Pointer\JsonPointer::fromJsonString('#/foo/bar/%F0%9F%98%86');
$jsonPointer->toJsonString(); // '/foo/bar/😆'
$jsonPointer->toUriFragmentIdentifierString(); // '#/foo/bar/%F0%9F%98%86'
$jsonPointer = Pointer\JsonPointer::fromUriFragmentIdentifierString('#foo/bar');
You can create a JsonPointer from ReferenceTokens:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$referenceTokens = [
Pointer\ReferenceToken::fromString('foo'),
Pointer\ReferenceToken::fromString('bar'),
];
$jsonPointer = Pointer\JsonPointer::fromReferenceTokens(...$referenceTokens);
$jsonPointer->toJsonString(); // '/foo/bar'
$jsonPointer->toUriFragmentIdentifierString(); // '#/foo/bar'
You can compare JsonPointers:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$one = Pointer\JsonPointer::fromJsonString('/foo/bar');
$two = Pointer\JsonPointer::fromJsonString('/foo~1bar');
$three = Pointer\JsonPointer::fromUriFragmentIdentifierString('#/foo/bar');
$one->equals($two); // false
$one->equals($three); // true
You can append a ReferenceToken to a JsonPointer:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$jsonPointer = Pointer\JsonPointer::fromJsonString('/foo/bar');
$referenceToken = Pointer\ReferenceToken::fromString('baz');
$newJsonPointer = $jsonPointer->append($referenceToken);
$newJsonPointer->toJsonString(); // '/foo/bar/baz'
$newJsonPointer->toUriFragmentIdentifierString(); // '#foo/bar/baz'
Specification
You can create a Specification that is always satisfied by a JsonPointer:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$specification = Pointer\Specification::always();
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo')); // true
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo/bar')); // true
You can create a Specification that is satisfied when a closure returns true for a JsonPointer:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$specification = Pointer\Specification::closure(static function (Pointer\JsonPointer $jsonPointer) {
return $jsonPointer->toJsonString() === '/foo/bar';
});
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo')); // false
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo/bar')); // true
You can create a Specification that is satisfied when a JsonPointer equals another JsonPointer:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$specification = Pointer\Specification::equals(Pointer\JsonPointer::fromJsonString('/foo/bar');
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo')); // false
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo/bar')); // true
You can create a Specification that is never satisfied by a JsonPointer:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$specification = Pointer\Specification::never();
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo')); // false
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo/bar')); // false
You can compose Specifications to find out if a JsonPointer satisfies any of them:
declare(strict_types=1);
use Ergebnis\Json\Pointer;
$specification = Pointer\Specification::anyOf(
Pointer\Specification::closure(static function(Pointer\JsonPointer $jsonPointer) {
return $jsonPointer->toJsonString() === '/foo/bar';
}),
Pointer\Specification::equals(Pointer\JsonPointer::fromJsonString('/foo/baz')),
Pointer\Specification::never(),
);
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo')); // false
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo/bar')); // true
$specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo/baz')); // true
Changelog
Please have a look at CHANGELOG.md.
Contributing
Please have a look at CONTRIBUTING.md.
Code of Conduct
Please have a look at CODE_OF_CONDUCT.md.
License
This package is licensed using the MIT License.
Please have a look at LICENSE.md.
Curious what I am building?