SION 在 Swift 中的处理库。
import SION
var sion:SION = [
"nil": nil,
"bool": true,
"int": -42,
"double": 42.195,
"string": "漢字、カタカナ、ひらがなの入ったstring😇",
"array": [nil, true, 1, 1.0, "one", [1], ["one":1.0]],
"dictionary": [
"nil":nil, "bool":false, "int":0, "double":0.0, "string":"","array":[], "object":[:]
],
"url":"https://github.com/dankogai/"
]
sion["data"] = .Data("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")
sion["date"] = .Date(0x0p+0)
sion["ext"] = .Ext("1NTU") // 0xd4,0xd4,0xd4
该模块既是对 SION
的介绍,也是其参考实现。SION
是一种数据序列化格式,类似于 JSON,但功能更强大、更具表现力。 正如 JSON 源于 {ECMA,Java}Script 字面量,SION 源于 Swift 字面量。 因此,正如 JSON 以 JavaScript 对象表示法命名一样,SION 以 Swift 可互换对象表示法命名。 但正如其名称所暗示的那样,SION 与 JSON 一样,是语言无关的。
SION 可以序列化 JSON 可以序列化的任何内容,并且还支持:
Data
Date
Dictionary
中非 String
类型的键Int
和 Double
是有区别的,而不是 Number
。 因此,您可以无损地交换 64 位整数。SION
是一种文本序列化。类型 | SION | MsgPack | JSON | 属性列表 (Property List) | 注释 |
---|---|---|---|---|---|
Nil |
✔︎ | ✔︎ | ✔︎ | ❌ | plist: 仅限 .binary |
Bool |
✔︎ | ✔︎ | ✔︎ | ✔︎ | |
Int |
✔︎ | ✔︎ | ❌ | ✔︎ | 64位 |
Double |
✔︎ | ✔︎ | ✔︎ | ✔︎ | JSON 的 Number |
String |
✔︎ | ✔︎ | ✔︎ | ✔︎ | utf-8 编码 |
Data |
✔︎ | ✔︎ | ❌ | ✔︎ | 二进制 blob |
Date |
✔︎ | ✔︎ | ❌ | ✔︎ | .timeIntervalSince1970, Double 类型表示 |
[Self] |
✔︎ | ✔︎ | ✔︎ | ✔︎ | 又名 Array (数组) |
[String:Self] |
✔︎ | ✔︎ | ✔︎ | ✔︎ | 又名 Object (对象), Map (映射)... |
[Self:Self] |
✔︎ | ✔︎ | ❌ | ❌ | 非 String 类型的键 |
Ext |
✔︎ | ✔︎ | ❌ | ❌ | msgpack 扩展 |
SION
与 JSON 和属性列表向上兼容。 事实上,SION
可以对 JSON 和属性列表进行 {反}序列化。有关格式详情,请参阅 SION 的主页。
现在位于 DESCRIPTION.md。
$ git clone https://github.com/dankogai/swift-sion.git
$ cd swift-sion # the following assumes your $PWD is here
$ swift build
简单地
$ swift run --repl
或
$ scripts/run-repl.sh
然后在你的 repl 中,
1> import SION
2> let sion:SION = ["swift":["safe","fast","expressive"]]
sion: SION.SION = Object {
Object = 1 key/value pair {
[0] = {
key = "swift"
value = Array {
Array = 3 values {
[0] = String {
String = "safe"
}
[1] = String {
String = "fast"
}
[2] = String {
String = "expressive"
}
}
}
}
}
}
Xcode 项目被有意地从仓库中排除,因为它应该通过 swift package generate-xcodeproj
生成。 为方便起见,你可以
$ scripts/prep-xcode
然后工作区会打开,Playground 在最上面。 该 playground 被编写为手册。 要运行,请确保在 Playground Setting 中将位置设置为 Relative to Playground。
不幸的是,Swift Package Manager 不支持 iOS。 更糟糕的是,Swift Playgrounds 不支持模块。 但别担心。 这个模块非常紧凑,你只需要复制 SION.swift。
对于 Swift Playgrounds,只需将其复制到 Sources
文件夹下即可。 如果你太懒,只需运行
$ scripts/ios-prep.sh
并且 iOS/JSON.playground
就设置好了。 你不必在其中 import JSON
。
该 playground 与 iOS 完全兼容。 通过 iCloud 云盘同步,尽情享受吧!
将以下内容添加到 dependencies
部分
.package(
url: "https://github.com/dankogai/swift-sion.git", from: "0.0.0"
)
并将以下内容添加到 .target
参数
.target(
name: "YourSwiftyPackage",
dependencies: ["SION"])
现在你所要做的就是
import SION
在你的代码中。 尽情享受吧!
Swift 5 或更高版本,OS X 或 Linux 用于构建。