Swift JSON
来源:互联网 发布:php环境配置教程 百度 编辑:程序博客网 时间:2024/06/18 09:25
转载声明:http://tangplin.github.io/swiftyjson/
为什么处理JSON很麻烦
在Objective-C中从服务器返回的json中拿数据是很麻烦、很不安全的事情,服务端稍稍出一点差池,就可能引起客服端的crash,这个就是为什么很多开源model层代码流行的原因。
但是很可惜在swift中,这个问题不但延续了,并且由于optional的引入,如果要手动从AnyObject(也就是Objective-C的id)取得数据更加麻烦,例如:
let jsonObject : AnyObject! = NSJSONSerialization.JSONObjectWithData(dataFromTwitter, options: NSJSONReadingOptions.MutableContainers, error: nil)if let statusesArray = jsonObject as? NSArray{ if let aStatus = statusesArray[0] as? NSDictionary{ if let user = aStatus["user"] as? NSDictionary{ if let userName = user["name"] as? NSDictionary{ //好累,我就取个数据写了这么多。 } } }}
我们需要判断这个节点是否存在,是不是我们想要的class,下一个节点是否存在,是不是我们想要的class…
就算我们用optional来简化一下:
let jsonObject : AnyObject! = NSJSONSerialization.JSONObjectWithData(dataFromTwitter, options: NSJSONReadingOptions.MutableContainers, error: nil)if let userName = (((jsonObject as? NSArray)?[0] as? NSDictionary)?["user"] as? NSDictionary)?["name"]{ //这个代码基本看不懂了啊!}
和上面做的事情一样,只是代码量少一点。这个能忍吗?
我们来看看使用SwfityJSON之后:
let json = JSON(data: dataFromNetworking)if let userName = json[0]["user"]["name"].string{ //就这么简单取到了。}
并且我们不用担心数组越界;想一个String,却取到了NSNumber等等问题。看下面的代码: let json = JSON(data: dataFromNetworking) if let userName = json[999999][“wrong_key”][“wrong_name”].string{ //放心,肯定不会引起崩溃的。 } else { //走到错误处理来了,打印一下看看错在哪里吧。 println(json[999999][“wrong_key”][“wrong_name”]) }
支持的iOS/OSX版本:
最新的2.1.0支持iOS7和OSX 10.9,但是这里有个一坑。如果要支持iOS7只能把代码拷贝过去,不能引入framework(apple你真坑!)。 需要XCode6.1以上版本,谁让swift标准库都不稳定呢。
如何配置到你的项目中:
去看matt写的Alamofire的配置吧, swift的项目现在配置上都一样了(因为不引入C的东西和有自动依赖)。
SwiftyJSON的设计原则:
保证怎么玩都不会引起app的crash,不要被API的数据绑架。
如何使用:
初始化:
let json = JSON(data: dataFromNetworking)
//这里的object是AnyObject,但是必须是能转会成JSON的数据类型。传错也没关系,最多你后面再也取不到数据了。let json = JSON(jsonObject)
Subscript “下标?”:
从一个假定对应的是数组里面取double
let name = json[0].double
从一个假定对应的是字典里面取stringValue,注意多了一个Value
let name = json["name"].stringValue
好玩的来了,从一个数组(好似一个路径中)取string
let name = json[1,"list",2,"name"].string//上面下面实际上是一样的let name = json[1]["like"][2]["name"].string
来一个本办法,但是以后会好玩。
let name = json[[1,"list",2,"name"]].string
看起来很蠢,但是可以这样写,以后可以动态的调整你要取得数据路径,也就是可以用配置来取数据(这句话没理解没关系)。
let path = [1,"list",2,"name"]let name = json[path].string
循环,这个必须有
循环字典:第一个参数是一个key, 第二个参数是JSON
//If json is .Dictionaryfor (key: String, subJson: JSON) in json { //Do something you want}
循环数组,注意循环数组也只能用元组,第一个参数是一个string的index, 第二个参数是JSON
//If json is .Array//The `index` is 0..<json.count's string valuefor (index: String, subJson: JSON) in json { //Do something you want}
上面就是最重要的几个部分。其余去看英文版,看代码就能懂。改天再来写。
- SWIFT JSON
- Swift JSON
- Swift JSON 教程:使用 JSON
- Swift 与 JSON 数据
- swift 解析json数据
- Swift解析JSON数据
- Swift - JSON
- Swift 与 JSON 数据
- 使用swift解析json
- ios swift http json
- Swift 解析 JSON
- iOS Json解析Swift
- swift的json解析
- Swift 读取,处理Json数据
- iOS Swift-Json解析
- IOS学习--- Swift JSON解析
- 12.Swift JSON 和 PList
- swift 的 JSON很麻烦
- Elasticsearch CURL操作方法
- Android开发艺术探索笔记(7)- IPC方式
- 微信小程序开发—项目实战之聊天机器人
- cocoapods的安装和使用以及版本升级遇到的问题
- spring MVC的使用
- Swift JSON
- sass安装 scss安装
- 泛型总结
- spring相关jar下载
- AIDL
- Hrbust 2293 棋盘村【记忆化搜索】
- rhel 6.5配置163 yum源学习记录
- 项目总结 - jquery.mousewheel.js实际应用
- 浅谈:C++函数