kingson-de /marshal-json-serializer
Marshal JSON 用于将数据结构序列化/打包成 JSON。它还可以将 JSON 反序列化/解包回数据结构。
v1.1.0
2018-11-05 23:12 UTC
Requires
- php: ^7.0
- ext-json: *
- kingson-de/marshal-serializer: ^1.3
Requires (Dev)
- phpunit/phpunit: ^6.5
This package is auto-updated.
Last update: 2024-09-12 11:04:06 UTC
README
简介
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 许可协议 发布。