IOS開發之——四種方法解析Jason數據(轉) – iPhone手機開發技術文章 iPhone軟體開發教學課程

 

(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];
}

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *