(1)使用TouchJSon解析方法:(需導入包:#import TouchJson/JSON/CJSONDeserializer.h)
//使用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)
//使用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不支持)
- (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)
- (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];
}