测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年2月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Keith Moon 维护。
一种简单、Swift 风格的与 JSON 交互方式。
JSONNode 极简、实用,代码少于 150 行。
让我们以 ImgFlip Meme API 的响应为例
{
"success": true,
"data": {
"memes": [
{
"id": "61579",
"name": "One Does Not Simply",
"url": "http://i.imgflip.com/1bij.jpg",
"width": 568,
"height": 335
},
{
"id": "101470",
"name": "Ancient Aliens",
"url": "http://i.imgflip.com/26am.jpg",
"width": 500,
"height": 437
}
]
}
}
要检索第一个图源的名称,您将执行以下操作
var jsonObject = try! JSONSerialization.jsonObject(with: jsonData, options: [.allowFragments])
guard
let jsonDictionary = jsonObject as? [String: Any],
let dataDictionary = jsonDictionary["data"] as? [String: Any],
let memesArray = dataDictionary["memes"] as? [[String: Any]],
let firstMeme = memesArray.first,
let memeName = firstMeme["name"] as? String else {
fatalError()
}
print(memeName)
使用 JSONNode 后,操作如下
var jsonNode = JSONNode(data: jsonData)!
guard let name = jsonNode["data"]["memes"][0]["name"].string else { fatalError() }
print(name)
通常,当 JSON 反序列化时,它会转换为嵌套数组和字典,由于这些集合需要一个类型,而 JSON 可以包含多种类型中的任何一种,因此使用了非特定的 Any
协议。
但这并不是对情况的真正描述。集合中不能是“任何东西”。JSON 结构中的每个节点只能是这样的以下之一
由于 JSON 节点的可能值是有限的,枚举是表示它的最佳方式。灵感来源于 Swift Playgrounds 通过游乐场页面和实时视图传递信息的方式。
要手动将此库用于您的项目,您可以