UBJSON 序列化

原生 Swift 中的 UBJSON 序列化

安装 & 兼容性

推荐(且唯一经过测试的)安装和使用 UBJSONSerialization 的方式是通过 SwiftPM,至少需要 Swift 5.1。

你的 Package.swift 文件内容应该类似于

import PackageDescription

let package = Package(
	name: "myawesomeproject",
	dependencies: [.package(url: "https://github.com/Frizlab/UBJSONSerialization.git", from: "1.0.1")],
	targets: [.target(name: "myawesomeproject", dependencies: [.product(name: "UBJSONSerialization", package: "UBJSONSerialization")])]
)

用法

UBJSONSerialization 拥有与 JSONSerialization 相同的基础接口。

使用示例

let myFirstUBJSONDoc = ["key": "value"]
let serializedUBJSONDoc = try UBJSONSerialization.data(withUBJSONObject: myFirstUBJSONDoc, options: [])
let unserializedUBJSONDoc = try UBJSONSerialization.ubjsonObject(with: serializedUBJSONDoc, options: [])
print(myFirstUBJSONDoc == unserializedUBJSONDoc as! [String: String])

也支持序列化/反序列化到/从流。重要:与 JSONSerialization 不同,当从 [StreamReader](https://github.com/Frizlab/stream-reader) 中解析出一个完整的有效对象后,你可以从同一个流中反序列化另一个对象。这对于解析来自单个流中的多个分隔文档非常有用。

最后,一个方法可以让你知道给定的字典是否可以序列化为 UBJSON 文档。

替代方案

目前我不知道 Swift 中还有没有其他 UBJSON 序列化/反序列化的实现。

参考

我使用了来自 http://ubjson.org 的 UBJSON 规范

待办事项

  • ❏ 验证对单个流中多个 UBJSON 文档解码的支持;

  • ❏ 支持流式传输(实时接收/发送数据);

  • ❏ 在未来的某个时候,但也许是在一个单独的项目中,添加对 Swift 的 Encoder 协议的支持。

  • ❏ Swift NIO 支持?

如果该项目获得足够的关注,我将认真地进行开发。 欢迎提出问题,我会尽力回答。

欢迎提交 Pull Request 😉

许可证

MIT(参见 License.txt 文件)