punkstar / document-marshaller
一个用于使用JSON编码和解码结构化数据的库
0.1.0
2016-07-04 22:05 UTC
Requires (Dev)
- phpunit/phpunit: ^5.4
- satooshi/php-coveralls: ~2@dev
This package is auto-updated.
Last update: 2024-09-13 05:45:20 UTC
README
这是一个实验 - 自行承担风险!
该库的目的是提供一个机制,使用单个文档进行数据的序列化和反序列化,允许在单个文件中传输和存储相关数据。
实现说明
- 布尔值将被转换为整数
安装
composer require punkstar/document-marshaller
用法
使用Document
和DocumentFragment
创建您的文档,例如
$document = new Document([
new DocumentFragment("Fragment One", "This is the content in this fragment"),
new DocumentFragment("Fragment Two", "This is the content in this fragment, the second")
]);
创建marshaller和校验和计算器
$checksumCalculator = new Checksum();
$fragmentMarshaller = new DocumentFragment\Marshaller();
$marshaller = new DocumentMarshaller($fragmentMarshaller, $checksumCalculator);
序列化文档
$marshalledDocument = $marshaller->marshall($document);
文档格式
文档使用以下结构以JSON编码
{
"v": "", // Document Version
"c": "" // Document Checksum
"f": [ // Document Fragments
{
"n": "" // Document Fragment Name
"d": "" // Document Fragment Data
}
...
]
}
文档
- 一个文档必须是对象。
- 文档应该有一个版本,由键的值
v
指示。如果版本不存在,则必须假定版本值为1
。 - 文档应该有一个校验和,由键的值
c
指示。如果校验和不存在,则应跳过任何验证逻辑,并且如果适当,用户应该收到一个非致命警告。 - 文档应该有一个片段数组,由键的值
f
指示。如果片段数组不存在,则必须假定文档没有片段。
文档版本
- 文档版本必须表示为整数。
文档片段
- 文档片段必须是一个对象数组,具有名为
n
的键和一个名为d
的数据键。 - 文档片段的名称和数据必须使用base64编码。
文档校验和
- 文档校验和必须通过以下方式计算:按名称对片段对象进行排序,然后使用sha256对JSON片段数组进行哈希。
以下提供了一些示例
第一个文档包含两个片段,一个名为Header
;另一个Body
。Header
片段的内容是字符串Hello
。Body
片段的内容是World
。这些片段的JSON表示如下
[
{
"n": "Header",
"d": "Hello"
},
{
"n": "Body",
"d": "World"
}
]
因此,此文档的校验和将是
sha256([{"n":"SGVhZGVy","d":"SGVsbG8="},{"n":"Qm9keQ==","d":"V29ybGQ="}]) == "d827049039f82a8b65a9b0f52e637cf3bc5d1e0dec7d6198edf901a5e3dcae7d"
因此,整个文档的表示将是
{
"v": 1,
"c": "d827049039f82a8b65a9b0f52e637cf3bc5d1e0dec7d6198edf901a5e3dcae7d",
"f": [{
"n": "Header",
"d": "Hello"
}, {
"n": "Body",
"d": "World"
}]
}