iOS開發-使用第三方庫AFNetWorking解析JSON和XML數據


利用第三方庫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 }

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM