Keith Moon

3个库

JSONNode

JSONNode

与JSON交互的简单、Swift方式。

JSONNode简单、实用,代码行数不足150行。

与传统JSON处理的优势

以下示例展示了从ImgFlip Meme API获取的响应

JSON { "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 } ] } }

要检索第一张表情的数据,您会这样做

```Swift 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后变成以下这样

```Swift var jsonNode = try! JSONNode(data: jsonData) guard let name = jsonNode["data"]["memes"][0]["name"].string else { fatalError() }

print(name) ```

工作原理

通常,在反序列化JSON时,它会转换为嵌套数组和字典,由于这些集合需要类型,而JSON可能包含多种类型,所以使用非特定Any协议。

但这并不是真实的表示。集合中不能有“任何东西”。JSON结构中的每个节点只能是从以下列表中选择一个: - 字符串 - 布尔值 - 整数 - 浮点数 - 包含此列表中的某个元素的数组 - 字典,键为字符串,值为此列表中的某个元素

有了JSON节点的有限可能值列表,枚举是最好的表示方式。受到Swift Playgrounds在游乐场页面和实时视图之间传输信息方式的影响。

要求

  • Swift 3
  • Xcode 8

集成

CocoaPods

您可以使用CocoaPods通过将其添加到您的Podfile中来安装JSONNode

```ruby platform :ios, '8.0' use_frameworks!

target 'MyApp' do pod 'JSONNode' end ```

请注意,这需要CocoaPods版本36,并且您的iOS部署目标至少为8.0

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

您可以在项目中手动使用此库

  1. 对于项目,只需将JSONNode.swift拖动到项目结构中
  2. 对于工作区,包含整个JSONNode.xcodeproj

许可证:MIT

  • Swift