生活随笔
收集整理的這篇文章主要介紹了
iOS中的JSON解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、在iOS中,JSON的常見解析方案有4種
(1)第三方框架:JSONKit、SBJson、TouchJSON(性能從左到右,越差)?
(2)蘋果原生(自帶):NSJSONSerialization(性能最好)
二、示例代碼:
(1)使用TouchJSon解析方法:(需導入包:#import "TouchJson/JSON/CJSONDeserializer.h")
[cpp]?view plaincopy
//使用TouchJson來解析北京的天氣??-?(IBAction)btnPressTouchJson:(id)sender?{??????//獲取API接口??????NSURL?*url?=?[NSURL?URLWithString:@"http://m.weather.com.cn/data/101010100.html"];??????//定義一個NSError對象,用于捕獲錯誤信息??????NSError?*error;??????NSString?*jsonString?=?[NSString?stringWithContentsOfURL:url?encoding:NSUTF8StringEncoding?error:&error];??????NSLog(@"jsonString--->%@",jsonString);??????//將解析得到的內容存放字典中,編碼格式為UTF8,防止取值的時候發生亂碼??????NSDictionary?*rootDic?=?[[CJSONDeserializer?deserializer]?deserialize:[jsonString?dataUsingEncoding:NSUTF8StringEncoding]?error:&error];??????//因為返回的Json文件有兩層,去第二層內容放到字典中去??????NSDictionary?*weatherInfo?=?[rootDic?objectForKey:@"weatherinfo"];??????NSLog(@"weatherInfo--->%@",weatherInfo);??????//取值打印??????txtView.text?=?[NSString?stringWithFormat:@"今天是?%@??%@??%@??的天氣狀況是:%@??%@?",[weatherInfo?objectForKey:@"date_y"],[weatherInfo?objectForKey:@"week"],[weatherInfo?objectForKey:@"city"],?[weatherInfo?objectForKey:@"weather1"],?[weatherInfo?objectForKey:@"temp1"]];????????}??(2)使用SBJson解析方法:(需導入包:#import "SBJson/SBJson.h")
[cpp]?view plaincopy
//使用SBJson解析南陽的天氣??-?(IBAction)btnPressSBJson:(id)sender?{??????NSURL?*url?=?[NSURL?URLWithString:@"http://m.weather.com.cn/data/101180701.html"];??????NSError?*error?=?nil;??????NSString?*jsonString?=?[NSString?stringWithContentsOfURL:url?encoding:NSUTF8StringEncoding?error:&error];??????SBJsonParser?*parser?=?[[SBJsonParser?alloc]?init];????????????NSDictionary?*rootDic?=?[parser?objectWithString:jsonString?error:&error];??????NSDictionary?*weatherInfo?=?[rootDic?objectForKey:@"weatherinfo"];??????txtView.text?=?[NSString?stringWithFormat:@"今天是?%@??%@??%@??的天氣狀況是:%@??%@?",[weatherInfo?objectForKey:@"date_y"],[weatherInfo?objectForKey:@"week"],[weatherInfo?objectForKey:@"city"],?[weatherInfo?objectForKey:@"weather1"],?[weatherInfo?objectForKey:@"temp1"]];??}??(3)使用IOS5自帶解析類NSJSONSerialization方法解析:(無需導入包,IOS5支持,低版本IOS不支持)
[cpp]?view plaincopy
-?(IBAction)btnPressIOS5Json:(id)sender?{????????????NSError?*error;??????//加載一個NSURL對象??????NSURLRequest?*request?=?[NSURLRequest?requestWithURL:[NSURL?URLWithString:@"http://m.weather.com.cn/data/101180601.html"]];??????//將請求的url數據放到NSData對象中??????NSData?*response?=?[NSURLConnection?sendSynchronousRequest:request?returningResponse:nil?error:nil];??????//IOS5自帶解析類NSJSONSerialization從response中解析出數據放到字典中??????NSDictionary?*weatherDic?=?[NSJSONSerialization?JSONObjectWithData:response?options:NSJSONReadingMutableLeaves?error:&error];??????NSDictionary?*weatherInfo?=?[weatherDic?objectForKey:@"weatherinfo"];??????txtView.text?=?[NSString?stringWithFormat:@"今天是?%@??%@??%@??的天氣狀況是:%@??%@?",[weatherInfo?objectForKey:@"date_y"],[weatherInfo?objectForKey:@"week"],[weatherInfo?objectForKey:@"city"],?[weatherInfo?objectForKey:@"weather1"],?[weatherInfo?objectForKey:@"temp1"]];??????NSLog(@"weatherInfo字典里面的內容為--》%@",?weatherDic?);??}??(4)使用JSONKit的解析方法:(需導入包:#import "JSONKit/JSONKit.h")
[cpp]?view plaincopy
-?(IBAction)btnPressJsonKit:(id)sender?{????????????//如果json是“單層”的,即value都是字符串、數字,可以使用objectFromJSONString??????NSString?*json1?=?@"{\"a\":123,?\"b\":\"abc\"}";??????NSLog(@"json1:%@",json1);??????NSDictionary?*data1?=?[json1?objectFromJSONString];??????NSLog(@"json1.a:%@",[data1?objectForKey:@"a"]);??????NSLog(@"json1.b:%@",[data1?objectForKey:@"b"]);??????[json1?release];????????????//如果json有嵌套,即value里有array、object,如果再使用objectFromJSONString,程序可能會報錯(測試結果表明:使用由網絡或得到的php/json_encode生成的json時會報錯,但使用NSString定義的json字符串時,解析成功),最好使用objectFromJSONStringWithParseOptions:??????NSString?*json2?=?@"{\"a\":123,?\"b\":\"abc\",?\"c\":[456,?\"hello\"],?\"d\":{\"name\":\"張三\",?\"age\":\"32\"}}";??????NSLog(@"json2:%@",?json2);??????NSDictionary?*data2?=?[json2?objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];??????NSLog(@"json2.c:%@",?[data2?objectForKey:@"c"]);??????NSLog(@"json2.d:%@",?[data2?objectForKey:@"d"]);??????[json2?release];??} ?部分內容轉載自:http://blog.csdn.net/enuola/article/details/7903632/
總結
以上是生活随笔為你收集整理的iOS中的JSON解析的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。