ergebnis / json-pointer
提供JSON指针的抽象。
Requires
- php: ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0
Requires (Dev)
- ergebnis/data-provider: ^3.2.0
- ergebnis/license: ^2.4.0
- ergebnis/php-cs-fixer-config: ^6.20.0
- ergebnis/phpunit-slow-test-detector: ^2.9.0
- fakerphp/faker: ^1.23.1
- infection/infection: ~0.26.6
- phpunit/phpunit: ^9.6.16
- psalm/plugin-phpunit: ~0.18.4
- rector/rector: ~0.19.2
- vimeo/psalm: ^5.20.0
README
本项目提供了一个包含JSON指针抽象的composer
包。
安装
运行
composer require ergebnis/json-pointer
用法
引用令牌
您可以从一个string
值创建一个ReferenceToken
<?php 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'
您可以从一个JSON string
值创建一个ReferenceToken
<?php 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'
您可以从一个URI片段标识string
值创建一个ReferenceToken
<?php 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'
您可以从一个int
值创建一个ReferenceToken
<?php declare(strict_types=1); use Ergebnis\Json\Pointer; $referenceToken = Pointer\ReferenceToken::fromInt(9001); $referenceToken->toJsonString(); // '9001' $referenceToken->toString(); // '9001' $referenceToken->toUriFragmentIdentifierString(); // '9001'
您可以比较ReferenceToken
<?php 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
您可以从一个文档创建一个引用该文档的JsonPointer
<?php declare(strict_types=1); use Ergebnis\Json\Pointer; $jsonPointer = Pointer\JsonPointer::document(); $jsonPointer->toJsonString(); // '' $jsonPointer->toUriFragmentIdentifierString(); // '#'
您可以从一个JSON string
表示形式值创建一个JsonPointer
<?php 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'
您可以从一个URI片段标识string
表示形式值创建一个JsonPointer
<?php declare(strict_types=1); use Ergebnis\Json\Pointer; $jsonPointer = Pointer\JsonPointer::fromUriFragmentIdentifierString('#/foo/bar/%F0%9F%98%86'); $jsonPointer->toJsonString(); // '/foo/bar/😆' $jsonPointer->toUriFragmentIdentifierString(); // '#/foo/bar/%F0%9F%98%86'
您可以从ReferenceToken
创建一个JsonPointer
<?php 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'
您可以比较JsonPointer
<?php 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
您可以将一个ReferenceToken
追加到JsonPointer
<?php 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'
规范
您可以创建一个始终被JsonPointer
满足的Specification
<?php 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
您可以创建一个当闭包对JsonPointer
返回true
时满足的Specification
<?php 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
您可以创建一个当JsonPointer
等于另一个JsonPointer
时满足的Specification
<?php 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
您可以创建一个永远不会被JsonPointer
满足的Specification
<?php 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
您可以创建一个当另一个Specification
不被JsonPointer
满足时满足的Specification
<?php declare(strict_types=1); use Ergebnis\Json\Pointer; $specification = Pointer\Specification::not(Pointer\Specification::equals(Pointer\JsonPointer::fromJsonString('/foo/bar'))); $specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo')); // true $specification->isSatisfiedBy(Pointer\JsonPointer::fromJsonString('/foo/bar')); // false
您可以将Specification
组合起来以确定JsonPointer
是否满足任何一个
<?php 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
变更日志
本项目维护者将本项目的重要更改记录在变更日志中。
贡献
本项目维护者建议遵循贡献指南。
行为准则
本项目维护者要求贡献者遵守行为准则。
一般支持策略
本项目维护者提供有限支持。
您可以通过赞助 @localheinz或为此项目相关的服务请求发票来支持本项目的维护。
PHP版本支持策略
本项目支持具有活跃和安全支持的PHP版本。
本项目维护者在PHP版本最初发布后添加对其支持,并在其达到安全支持结束阶段时停止对其支持。
安全策略
本项目有一个安全策略。
许可证
本项目使用MIT许可证。
社交
在Twitter上关注@localheinz和@ergebnis。