kingson-de/marshal-json-serializer

Marshal JSON 用于将数据结构序列化/打包成 JSON。它还可以将 JSON 反序列化/解包回数据结构。

v1.1.0 2018-11-05 23:12 UTC

This package is auto-updated.

Last update: 2024-09-12 11:04:06 UTC


README

Marshal Serializer logo

License Build Status Code Coverage Scrutinizer Code Quality

简介

Marshal JSON 是 序列化 / 打包 数据结构到 JSON。它还可以将 JSON 反序列化/解包回数据结构。

安装

通过 composer 安装库是最简单的方法

composer require kingson-de/marshal-json-serializer

以下 PHP 版本得到支持

  • PHP 7.0
  • PHP 7.1
  • PHP 7.2
  • PHP 7.3

执行测试

只需运行

composer test

或无代码覆盖率

composer quicktest

使用方法

如何创建可序列化的数据结构?

请查看 Marshal Serializer README 以获取更多信息。

如何使用 Marshal JSON 序列化器库?

库提供了一些静态方法,一旦定义了数据结构,就可以创建 JSON 数据。

<?php

use KingsonDe\Marshal\Data\Item;
use KingsonDe\Marshal\MarshalJson;

$json = MarshalJson::serialize(new Item($mapper, $model));
// or
$json = MarshalJson::serializeItem($mapper, $model);
// or
$json = MarshalJson::serializeItemCallable(function (User $user) {
    return [
        'username'  => $user->getUsername(),
        'email'     => $user->getEmail(),
        'birthday'  => $user->getBirthday()->format('Y-m-d'),
        'followers' => count($user->getFollowers()),
    ];
}, $user);
// or
$json = MarshalJson::serializeCollection($mapper, $modelCollection);
// or 
$json = MarshalJson::serializeCollectionCallable(function (User $user) {
    return [
        'username'  => $user->getUsername(),
        'email'     => $user->getEmail(),
        'birthday'  => $user->getBirthday()->format('Y-m-d'),
        'followers' => count($user->getFollowers()),
    ];
}, $userCollection);

反序列化/解包

要转换 JSON 回到您的结构,请使用 Marshal 的 deserialize 函数。您需要一个扩展 AbstractObjectMapper 的类,并将其传递给 deserializeJson 函数。当使用 FlexibleData 的 get 函数时,如果键不存在,将抛出 OutOfBoundsException。如果不需要异常,可以使用 find 函数,在这种情况下将返回自定义默认值。

<?php

use KingsonDe\Marshal\AbstractObjectMapper;
use KingsonDe\Marshal\Data\FlexibleData;

class UserIdMapper extends AbstractObjectMapper {

    public function map(FlexibleData $flexibleData, ...$additionalData) {
        return $flexibleData->get('id');
    }
}
<?php

use KingsonDe\Marshal\MarshalJson;

$json = '{"id": 123}';

$id = MarshalJson::deserializeJson($json, new UserIdMapper());

另一种选择是使用 deserializeCallable 函数。

<?php

use KingsonDe\Marshal\MarshalJson;

$id = MarshalJson::deserializeJsonCallable($json, function (FlexibleData $flexibleData) {
    return $flexibleData['id'];
});

修改现有 JSON

使用 FlexibleData 是修改现有 JSON 的简单方法。以下是一个示例

<?php

use KingsonDe\Marshal\Data\FlexibleData;
use KingsonDe\Marshal\MarshalJson;

$json = '{"name": "John Doe"}';

$flexibleData = new FlexibleData(MarshalJson::deserializeJsonToData($json));
$flexibleData['name'] = 'Jane Doe';

$modifiedJson = MarshalJson::serialize($flexibleData);

许可协议

本项目根据 Apache 2.0 许可协议 发布。