maciej-sz/pj-freeze

PHP到JSON序列化/反序列化工具

0.2.1 2016-08-25 10:31 UTC

This package is not auto-updated.

Last update: 2024-09-26 03:12:43 UTC


README

PHP到JSON序列化/反序列化工具

Latest Version on Packagist Build Status No dependencies MIT License

功能

  • 序列化到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