maciej-sz / pj-freeze
PHP到JSON序列化/反序列化工具
0.2.1
2016-08-25 10:31 UTC
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ^5.4
This package is not auto-updated.
Last update: 2024-09-26 03:12:43 UTC
README
PHP到JSON序列化/反序列化工具
功能
- 序列化到JSON
- 从JSON反序列化
- 循环引用处理
- 相应的JavaScript库 可用于在浏览器端读取序列化数据
用法
此包可用于序列化和反序列化包含循环引用的数据对象。
示例:基本往返
use MaciejSz\PjFreeze\PjFreeze; $Freeze = new PjFreeze(); $data = ["foo", "bar", "baz"]; $SerializationResult = $Freeze->serialize($data); $serializedObj = $SerializationResult->jsonSerialize(); $unserialized = $Freeze->unserialize($serializedObj); assert($data == $unserialized);
示例:持久化往返
为了持久化序列化结果,需要额外一步:必须调用PHP的json_encode()
函数。这次json_encode()
不会产生"检测到递归"错误。
use MaciejSz\PjFreeze\PjFreeze; $Freeze = new PjFreeze(); $data = ["foo", "bar", "baz"]; $serializedObj = $Freeze->serialize($data)->jsonSerialize(); $serialized_str = json_encode($serializedObj); file_put_contents("/tmp/data.json", $serialized_str); // ... $contents_str = file_get_contents("/tmp/data.json"); $unserialized = $Freeze->unserializeJson($contents_str); assert($data == $unserialized);
示例:循环引用
仅使用 json_encode()
// WARNING: this is an example of how NOT to encode circular references use MaciejSz\PjFreeze\PjFreeze; $data = new \stdClass(); $data->recursion = $data; // circular reference $raw_encoded = json_encode($data); echo json_last_error_msg(); // "Recursion detected"
使用 PjFreeze
use MaciejSz\PjFreeze\PjFreeze; $data = new \stdClass(); $data->recursion = $data; // circular reference $Freeze = new PjFreeze(); $serializedObj = $Freeze->serialize($data)->jsonSerialize(); $jp_freeze_encoded = json_encode($serializedObj); echo json_last_error_msg(); // "No error" $unserializedObj = json_decode($jp_freeze_encoded); $unserialized = $Freeze->unserialize($unserializedObj); assert($unserialized->recursion === $unserialized);
安装
通过composer
composer require maciej-sz/pj-freeze