三迈 / json-serializer
灵活的JSON序列化器
0.2.6
2024-02-17 11:00 UTC
Requires
- php: >=7.4
- ext-json: *
- jms/serializer: ^3.9
Requires (Dev)
- ergebnis/composer-normalize: >=2.8
- friendsofphp/php-cs-fixer: ^3.23.0
- infection/infection: >=0.10
- phan/phan: >=1
- php-coveralls/php-coveralls: ^2.4.1
- phpstan/phpstan: >=0.10
- phpunit/phpunit: ^9.4 || ^10
- vimeo/psalm: >=3.0.16
README
这个库是围绕 jms/serializer 的一个轻量级封装。
该库的目的是简化对象的反序列化和序列化,特别是对象的数组和标量值。你所需要做的就是遵循一个简单的协议。
项目列表
JMS Serializer 默认支持反序列化数组,但由于用户必须指定完整的类型,如 array<T>
,因此它略微复杂。这个库通过提供一种两方法协议来抽象掉这种额外的复杂性。
例如,反序列化此对象
use JSONSerializer\Contracts\ItemList; class ItemListExample implements ItemList { /** @var ItemExample[] */ public $items = []; public static function getListType(): string { return ItemExample::class; } public static function withList(array $list) { $itemList = new self(); $itemList->items = $list; return $itemList; } }
从JSON数组
[ {"name": "foo"}, {"name": "bar"} ]
使用一个熟悉的方法
use JSONSerializer\Serializer; $serializer = new Serializer(); $result = $serializer->deserialize($json, ItemListExample::class);
将在 $result
中留下一个 ItemListExample
实例,其中 $result->items
填充了与源数组中的两个项目。
标量值
还有一个类似的便利接口称为 ScalarValue
,用于帮助反序列化包装的原始标量值。
use JSONSerializer\Contracts\ScalarValue; class ScalarValueExample implements ScalarValue { /** @var int */ public $value; public static function withValue($value) { $item = new self(); $item->value = $value; return $item; } public static function getType(): string { return 'int'; } }