sanmai / json-serializer
Flexible JSON Serializer
Installs: 23 834
Dependents: 4
Suggesters: 0
Security: 0
Stars: 1
Watchers: 3
Forks: 0
Open Issues: 0
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
This library is a thin wrapper around jms/serializer.
The purpose of this library is to make simpler deserialization/serialization of objects and, specifically, of arrays of objects, and scalar values. All you need is to follow a simple protocol.
ItemList
JMS Serializer supports deserializing arrays out of the box, but it is ever so slightly complicated since a user must specify a type in a full form, as in array<T>
, all the while returned deserialized value will be a plain array. This library abstracts away this extra complexity by providing a two-method protocol instead.
For example, deserialising this object:
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; } }
From a JSON array:
[ {"name": "foo"}, {"name": "bar"} ]
With an all-familiar method:
use JSONSerializer\Serializer; $serializer = new Serializer(); $result = $serializer->deserialize($json, ItemListExample::class);
Will leave an instance of ItemListExample
in $result
with $result->items
filled with two items as in the source array.
ScalarValue
There's a similar convenience interface called ScalarValue
to aid with unserializing wrapped primitive scalar values.
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'; } }