iOS Swift-Json解析

来源:互联网 发布:人工智能 创投 编辑:程序博客网 时间:2024/05/22 17:48

在OC中解析json数据我一般用iOS5之后自带的NSJSONSerialization,转为字典或数组再取值。


在Swift中,因为Swift强调类型安全,属性上多了可选类型(optional),使用NSJSONSerialization获取jsonObject后,需要繁琐地downcast,SwiftJson的一个例子

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{                //Finally We Got The Name            }        }    }}

或者可选链式调用

let jsonObject : AnyObject! = NSJSONSerialization.JSONObjectWithData(dataFromTwitter, options: NSJSONReadingOptions.MutableContainers, error: nil)if let userName = (((jsonObject as? NSArray)?[0] as? NSDictionary)?["user"] as? NSDictionary)?["name"]{  //What A disaster above}

解决办法:SwiftJson https://github.com/pvwoods/SwiftyJSON

let json = JSONValue(dataFromNetworking)if let userName = json[0]["user"]["name"].string{  //Now you got your value}
let json = JSONValue(dataFromNetworking)if let userName = json[999999]["wrong_key"]["wrong_name"].string{  //Calm down, take it easy, the ".string" property still produces the correct Optional String type with safety}

SwiftJson是一个枚举类型,内部也是使用NSJSONSerialization解析,当使用key来获取一个json对象,如果获取失败就返回JInvalid,直到最后调用.string .number .bool拆包才返回nil,就算中间获取出错也不会crash。

0 0
原创粉丝点击