v0.1 2018-08-19 13:20 UTC

This package is auto-updated.

Last update: 2024-09-29 05:08:28 UTC


README

Build Status Coverage Status Infection Minimum PhpStan Level Scrutinizer Code Quality Maintainability Latest Stable Version License

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模式的一种实现。