JSONNode 1.2.5

JSONNode 1.2.5

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017年2月
SwiftSwift 版本3.0
SPM支持 SPM

Keith Moon 维护。



JSONNode 1.2.5

JSONNode

一种简单、Swift 风格的与 JSON 交互方式。

JSONNode 极简、实用,代码少于 150 行。

相较于传统 JSON 处理的优势

让我们以 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 通过游乐场页面和实时视图传递信息的方式。

要求

  • iOS 8.0+ | macOS 10.7+ | tvOS 9.0+ | watchOS 2.0+
  • Swift 3
  • Xcode 8

集成

手动(iOS 8+, OS X 10.9+)

要手动将此库用于您的项目,您可以

  1. 对于项目,只需将 JSONNode.swift 拖到项目树中
  2. 对于工作区,包括整个 JSONNode.xcodeproj