(1)使用TouchJSon解析方法:(需導入包:#import TouchJson/JSON/CJSONDeserializer.h)
//使用TouchJson來解析北京的天氣 - (IBAction)btnPressTouchJson:(id)sender { //獲取API接口 NSURL *url = [NSURL URLWithString:@https://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)
//使用SBJson解析南陽的天氣 - (IBAction)btnPressSBJson:(id)sender { NSURL *url = [NSURL URLWithString:@https://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不支持)
- (IBAction)btnPressIOS5Json:(id)sender { NSError *error; //加載一個NSURL對象 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@https://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)
- (void)btnPressJsonKit:(id)sender { //如果json是“單層”的,即value都是字符串、數字,可以使用objectFromJSONString NSString *json1 = @{a:123, :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, :abc, c:[456, hello], d:{ ame:張三, age:}}; NSLog(@json2:%@, json2); NSDictionary *data2 = [json2 objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode]; NSLog(@json2.c:%@, [data2 objectForKey:@c]); NSLog(@json2.d:%@, [data2 objectForKey:@d]); [json2 release]; }