因为Swift对于类型有非常严格的控制,它在处理JSON时是挺麻烦的,因为它天生就是隐式类型。SwiftyJSON是一个能帮助我们在Swift中使用JSON的开源类库。开始之前,让我们先看一下在Swift中处理JSON是多么痛苦。
下载地址:https://github.com/lingoer/SwiftyJSON
下面将解析http://api.smemo.info/test.php/Index/jsonTest?type=3这个JSON数据。
//SwiftyJson
//获取json
var apiData:NSData!=NSData(contentsOfURL: NSURL(string: "http://api.smemo.info/test.php/Index/jsonTest?type=3")!, options: NSDataReadingOptions.DataReadingUncached, error: nil)
//make json object
var result=NSString(data: apiData, encoding: NSUTF8StringEncoding)
var error:NSError?
println(result)
//生成json字段
let json=JSON(data: apiData, options: NSJSONReadingOptions.allZeros, error: &error);
//解析字段
if let language=json["language"].stringValue{
println("lanauage:\(language)")
}
if let title=json["user"]["title"].stringValue{
println("user title:\(title)")
}
if let url=json["user"]["url"].stringValue{
println("user url:\(url)")
}
//解析数组
if let dataArray = json["data"].arrayValue{
println(dataArray.description)
//遍历数组
for item in dataArray{
println(item.description)
//解析数组内的字段
if let type=item["name"].stringValue{
println("type:\(type)")
}
if let type=item["form"].stringValue{
println("form:\(type)")
}
if let type=item["type"].stringValue{
println("type:\(type)")
}
}
}
//解析字段以及下面的数组
if let extra = json["extra"]["type"].stringValue{
println("extra type:\(extra)")
}
//解析字段内的数组
if let dataArray = json["extra"]["data"].arrayValue{
println(dataArray.description)
//遍历数组
for item in dataArray{
println(item.description)
//解析数组内的字段
if let type=item["name"].stringValue{
println("extra type:\(type)")
}
if let type=item["form"].stringValue{
println("extra form:\(type)")
}
if let type=item["type"].stringValue{
println("extra type:\(type)")
}
}
}