stratadox / json
Requires
- php: >=7.2
Requires (Dev)
- fzaninotto/faker: ^1.7
- php-coveralls/php-coveralls: ^2.0
- phpstan/phpstan: ^0.9.2
- phpunit/phpunit: ^7.3
This package is auto-updated.
Last update: 2024-09-29 05:08:28 UTC
README
Json处理库,易于从和向json字符串读写。
安装
使用 composer require stratadox/json
安装
这是什么?
此库提供了一种简单面向对象的方法来处理PHP中的json字符串。
基本思路是从json字符串或“原始”数据创建一个Json
(PHP)对象,在PHP世界中表示json数据。通过此对象,可以检索json数据的内容。该接口还提供了一个机制来修改json结构,无论是通过修改当前实例还是返回修改后的副本。
要生成json编码的文本表示,只需将Json实例转换为字符串即可。
如何使用它?
该包提供了两种处理json结构的方法:不可变和可变。它们都实现了相同的接口,只是在实现write
方法的方式上有所不同。
不可变Json
通过转换json编码的字符串创建不可变json结构
<?php use Stratadox\Json\ImmutableJson; $json = ImmutableJson::fromString('{"foo":{"bar":"baz"}}');
或从“原始”数据
<?php use Stratadox\Json\ImmutableJson; $json = ImmutableJson::fromData(['foo' => ['bar' => 'baz']]);
检索值
assert(['bar' => 'baz'] === $json->retrieve('foo'));
检索嵌套值
assert('baz' === $json->retrieve('foo', 'bar'));
将值写入新副本
$changed = $json->write('qux', 'foo', 'bar');
(注意,要写入的值位于路径之前。)
更改的结构将包含新值
assert('{"foo":{"bar":"qux"}}' === (string) $changed);
原始结构将不会被修改
assert('{"foo":{"bar":"baz"}}' === (string) $json);
写调用可以链式使用
$changed = $json ->write('qux', 'foo', 'bar') ->write(123, 'foo', 'baz'); assert('{"foo":{"bar":"qux","baz":123}}' === (string) $changed);
可变Json
通过转换json编码的字符串创建可变json结构
<?php use Stratadox\Json\MutableJson; $json = MutableJson::fromString('{"foo":{"bar":"baz"}}');
或从“原始”数据
<?php use Stratadox\Json\MutableJson; $json = MutableJson::fromData(['foo' => ['bar' => 'baz']]);
检索值
assert(['bar' => 'baz'] === $json->retrieve('foo'));
检索嵌套值
assert('baz' === $json->retrieve('foo', 'bar'));
向结构写入新值
$json->write('qux', 'foo', 'bar');
(注意,要写入的值位于路径之前。)
写调用可以链式使用
$json ->write('qux', 'foo', 'bar') ->write(123, 'foo', 'baz'); assert('{"foo":{"bar":"qux","baz":123}}' === (string) $json);
解析器
JsonParser是一个简单的工厂,用于从字符串创建可变或不可变的Json实例。
<?php use Stratadox\Json\JsonParser; $json = JsonParser::create()->from('{"foo":{"bar":"baz"}}');
在需要解析字符串但不想直接调用构造函数的情况下可以使用它。
<?php namespace Acme; use Stratadox\Json\Json; use Stratadox\Json\Parser; class Signer { private $parseJson; private $signatureName; public function __construct(Parser $jsonParser, string $name) { $this->parseJson = $jsonParser; $this->signatureName = $name; } public function addSignatureTo(string $input): string { return (string) $this->sign($this->parseJson->from($input)); } private function sign(Json $input): Json { return $input->write($this->signatureName, 'Signed', 'by'); } }
默认情况下,解析器生成不可变json实例。可以通过使用mutable
方法将其调整为生成可变实例。要将其转换回不可变,请使用immutable
方法。
有趣的事实:JsonParser目前允许其类的确切两个实例,使其成为鲜为人知的Doubleton模式的一种实现。