原文出处:链接
GitHub地址
1)比如我们有一个如下的JSON数据,表示联系人集合:
[ {
"name":"hangge",
"age": 100,
"phones": [
{
"name":"公司",
"number":"123456"
},
{
"name":"家庭",
"number":"001"
}
]
},
{
"name":"big boss",
"age": 1,
"phones": [
{
"name":"公司",
"number":"111111"
}
]
}
]
2)使用NSJSONSerializationSwiftyJSON解析
if letuserArray = try ? NSJSONSerialization.JSONObjectWithData( jsonData,
options: .AllowFragments)as? [[String:AnyObject]],
let phones = userArray?[0]["phones"] as ? [[String:AnyObject]],
let number = phones[0]["number"] as ? String{
// 找到电话号码
print("第一个联系人的第一个电话号码:",number)
}
3)使用SwiftyJSON解析:
不用担心数组越界,不用判断节点,拆包什么的,代码如下:
let json = JSON(data: jsonData)
if let number = json[0]["phones"][0]["number"].string {
// 找到电话号码
print("第一个联系人的第一个电话号码:",number)
}
3,获取网络数据,并使用SwiftyJSON解析
(1)与NSURLSession结合
//创建NSURL对象
let urlString:String="http://www.hangge.com/getJsonData.php"
let url:NSURL! =NSURL(string:urlString)
//创建请求对象
let request:NSURLRequest=NSURLRequest(URL: url)
let session =NSURLSession.sharedSession()
let dataTask = session.dataTaskWithRequest(request,
completionHandler: {(data, response, error) ->Voidin
if error !=nil{
print(error?.code)
print(error?.description)
}else{
let json =JSON(data: data!)
if let number = json[0]["phones"][0]["number"].string {
// 找到电话号码
print("第一个联系人的第一个电话号码:",number)
}
}
})as NSURLSessionTask
//使用resume方法启动任务
dataTask.resume()
(2)与Alamofire结合
//创建NSURL对象
let urlString:String="http://www.hangge.com/getJsonData.php"
let url:NSURL! =NSURL(string:urlString)
Alamofire.request(.GET, url).validate().responseJSON { responsein
switch response.result {
case.Success:
if let value = response.result.value {
let json =JSON(value)
if let number = json[0]["phones"][0]["number"].string {
// 找到电话号码
print("第一个联系人的第一个电话号码:",number)
}
}
case.Failure(leterror):
print(error)
}
}
4,获取值
(1)可选值获取(Optional getter)
通过.number、.string、.bool、.int、.uInt、.float、.double、.array、.dictionary、int8、Uint8、int16、Uint16、int32、Uint32、int64、Uint64等方法获取到的是可选择值,我们需要自行判断是否存在,同时不存在的话可以获取具体的错误信息。
//int
if let age = json[0]["age"].int {
print(age)
}else{
//打印错误信息
print(json[0]["age"])
}
//String
if let name = json[0]["name"].string {
print(name)
}else{
//打印错误信息
print(json[0]["name"])
}
(2)不可选值获取(Non-optional getter)
使用xxxValue这样的属性获取值,如果没获取到的话会返回一个默认值。省得我们再判断拆包了。
//If not a Number or nil, return 0
let age:Int= json[0]["age"].intValue
//If not a String or nil, return ""
let name:String= json[0]["name"].stringValue
//If not a Array or nil, return []
let list:Array = json[0]["phones"].arrayValue
//If not a Dictionary or nil, return [:]
let phone:Dictionary = json[0]["phones"][0].dictionaryValue
原文出自:www.hangge.com转载请保留原文链接:http://www.hangge.com/blog/cache/detail_968.html