原生 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 文档。
我使用了来自 http://ubjson.org 的 UBJSON 规范
❏ 验证对单个流中多个 UBJSON 文档解码的支持;
❏ 支持流式传输(实时接收/发送数据);
❏ 在未来的某个时候,但也许是在一个单独的项目中,添加对 Swift 的 Encoder 协议的支持。
❏ Swift NIO 支持?
如果该项目获得足够的关注,我将认真地进行开发。 欢迎提出问题,我会尽力回答。
欢迎提交 Pull Request 😉