IkigaJSON
IkigaJSON 是一个真正快速的 JSON 解析器。在解码类型时,在我们的测试中,它的性能比 Foundation 快了 ~4 倍。
添加依赖项
SPM
.package(url: "https://github.com/Ikiga/IkigaJSON.git", from: "1.1.0"),
CocoaPods
pod 'IkigaJSON', '>= 1.1'
用法
import IkigaJSON
struct User: Codable {
let id: Int
let name: String
}
let data = Data()
var decoder = IkigaJSONDecoder()
let user = try decoder.decode(User.self, from: data)
原生 JSON
IkigaJSON 支持原生 JSON 类型(JSONObject 和 JSONArray),就像许多其他库一样,同时支持上述的可编码 API。关键的区别在于 IkigaJSON 在行内编辑 JSON,因此无需从 Swift 类型到 JSON 的额外转换开销。
var user = JSONObject()
user["username"] = "Joannis"
user["roles"] = ["admin", "moderator", "user"] as JSONArray
user["programmer"] = true
print(user.string)
print(user["username"].string)
// OR
print(user["username"] as? String)
SwiftNIO 支持
编码器和解码器支持 SwiftNIO。
var user = try JSONObject(buffer: byteBuffer)
print(user["username"].string)
我们还增加了使用 IkigaJSONEncoder 和 IkigaJSONDecoder 与 JSON 的能力。
let user = try decoder.decode([User].self, from: byteBuffer)
var buffer: ByteBuffer = ...
try encoder.encodeAndWrite(user, into: &buffer)
上述方法可用于异步地从数据库等源通过套接字流式传输多个实体。这可以大大减少内存使用。
性能
按设计,只要数据存储暴露了指针 API,您就可以在其基础上构建。这样,IkigaJSON (不需要)会从您的缓冲区中复制任何数据,保持其轻量级。整个解析器只需要 1 个内存分配即可正常工作,并允许重复使用解码器以重复使用内存分配。
支持
- 所有 Foundation 支持的解码策略
- Unicode
- 可编码
- 转义
- 性能
🚀 - 日期/数据 编码 策略
- 原始 JSON API(不可编码)
待办事项
\u
转义 Unicode 字符- 从
JSONObject
和JSONArray
解码可编码数据 - 轻量级 JSON 内联比较助手