原文出處:鏈接?
1)比如我們有一個如下的JSON數(shù)據(jù),表示聯(lián)系人集合:
[? {
?????? "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("第一個聯(lián)系人的第一個電話號碼:",number)
}
3)使用SwiftyJSON解析:
不用擔(dān)心數(shù)組越界,不用判斷節(jié)點窃躲,拆包什么的衷掷,代碼如下:
let json = JSON(data: jsonData)
if let number = json[0]["phones"][0]["number"].string {
??? // 找到電話號碼
???? print("第一個聯(lián)系人的第一個電話號碼:",number)
}
3搂蜓,獲取網(wǎng)絡(luò)數(shù)據(jù)原押,并使用SwiftyJSON解析
(1)與NSURLSession結(jié)合
//創(chuàng)建NSURL對象
?let urlString:String="http://www.hangge.com/getJsonData.php"
?let url:NSURL! =NSURL(string:urlString)
//創(chuàng)建請求對象
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("第一個聯(lián)系人的第一個電話號碼:",number)
}
}
})as NSURLSessionTask
//使用resume方法啟動任務(wù)
dataTask.resume()
(2)與Alamofire結(jié)合
//創(chuàng)建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("第一個聯(lián)系人的第一個電話號碼:",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這樣的屬性獲取值虱饿,如果沒獲取到的話會返回一個默認(rèn)值拥诡。省得我們再判斷拆包了。
?? //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轉(zhuǎn)載請保留原文鏈接:http://www.hangge.com/blog/cache/detail_968.html