利用第三方庫AFNetWorking解析網絡請求的JSON和MXL數據具有很多方便的地方。
第三方庫的下載地址:https://github.com/AFNetworking/AFNetworking
導入的包和宏定義
1 #import "ViewController.h" 2 #import "AFNetworking.h" 3 #import "GDataXMLNode.h" 4 5 //json地址 6 #define kJSONUrlString @"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=1" 7 8 //xml的地址 9 #define kXMLUrlString @"http://wiapi.hexun.com/news/getlist4.0.php?pid=100234721&pc=20&pn=1&st=0" 10 11 //json Post提交方式 12 #define kJsonPostUrlString @"http://api2.dfc.cn/sjll/v1/homes/basic_data" 13 14 //xml Post提交方式 15 #define kXMLPostUrlString @""
1.對JSON Get方式的請求方式
1 //對JSON Get方式的請求方式 2 - (void)jsonGetRequest 3 { 4 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 5 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"]; 6 [manager GET:kJSONUrlString parameters:nil success:^(AFHTTPRequestOperation *operation,id responseObject){ 7 if ([responseObject isKindOfClass:[NSData class]]) { 8 NSLog(@"responseObjectData = %@",responseObject); 9 } 10 else if ([responseObject isKindOfClass:[NSDictionary class]]) 11 { 12 NSLog(@"responseObjectDict = %@",responseObject); 13 } 14 } failure:^(AFHTTPRequestOperation *operation,NSError *error){ 15 16 }]; 17 //獲取隊列中有多少個請求 18 NSInteger count = manager.operationQueue.operationCount; 19 NSLog(@"count = %ld",count); 20 //取消隊列中所有的請求 21 [manager.operationQueue cancelAllOperations]; 22 }
2.對XML 的Get方式的請求方式
這里還使用了由Google提供的一個第三方庫GData對Xml文件的解析,github下載地址:https://github.com/graetzer/GDataXML-HTML
//錯誤:3840 ---就是表示服務器段的數據不是嚴格的按照xml的格式書寫的 //xml解析 - (void)xmlGetRequest { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/xml"]; //自己生成一個響應的序列化對象,不使用系統給的方式 manager.responseSerializer = [[AFHTTPResponseSerializer alloc] init]; [manager GET:kXMLUrlString parameters:nil success:^(AFHTTPRequestOperation *operation,id responseObject){ GDataXMLDocument *doc=[[GDataXMLDocument alloc] initWithData:responseObject encoding:NSUTF8StringEncoding error:nil]; NSString *path = @"/doc/focus/frame/title"; NSArray *titles=[doc nodesForXPath:path error:nil]; for (GDataXMLElement *title in titles) { NSLog(@"%@",title.stringValue); } //NSLog(@"requestObject = %@",responseObject); } failure:^(AFHTTPRequestOperation *operation,NSError *error){ NSLog(@"error = %@",error); }]; }
3.對JSON 的POST的請求方式
//post請求數據操作JSON數據 - (void)jsonPostRequest:(NSDictionary *)dict { //單例對象 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"]; [manager POST:kJsonPostUrlString parameters:dict success:^(AFHTTPRequestOperation *operation,id responseObject){ NSLog(@"responseObject = %@",responseObject); } failure:^(AFHTTPRequestOperation *operation,NSError *error){ NSLog(@"error = %@",error); }]; }
4.對XML的Post方式請求方式
1 //post方式請求xml數據 2 - (void)xmlPostRequest:(NSDictionary *)dict 3 { 4 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 5 //manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/xml"]; 6 //使用自己創建的對象取解析xml 7 manager.responseSerializer = [AFHTTPResponseSerializer alloc]; 8 [manager POST:kXMLPostUrlString parameters:dict success:^(AFHTTPRequestOperation *operation,id responseObject){ 9 10 NSLog(@"responseObject = %@",responseObject); 11 12 } failure:^(AFHTTPRequestOperation *operation,NSError *error){ 13 14 NSLog(@"error = %@",error); 15 16 }]; 17 }