IkigaJSON 2.0.0

IkigaJSON 2.0.0

Joannis Orlandos 维护。



IkigaJSON 2.0.0

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 字符
  • JSONObjectJSONArray 解码可编码数据
  • 轻量级 JSON 内联比较助手

媒体

架构