【www.guakaob.com--标准员】
第三篇
上一篇我们讲了如何通过NSURL类来获取数据,
这一章我们来讲下对于获取过来的数据如何解析.
好了直接进入正文吧.
正文:
上一篇讲了 我们获取过来的数据格式是JSON格式的
大家可以搜下对应JSON转换类就可以按照对应的内容进行数据转换了 我这边呢就提供一下我的转换方式
我目前搭建的项目用到的最多的就是UITableView
至于 怎么使用UITableView我之后会进行讲解的
我会在对应的.m文件中 定义 一个initListData方法.用来获取数据和解析数据 (还是直接贴代码吧)
-(void) initListData
{
GetWebInfo *getwebinfo=[GetWebInfo alloc];
NSString *myparameters=[[NSString alloc] initWithString:[NSString stringWithFormat:@"Method=getInfo&rows=4&page=%d",_page]];
getwebinfo.parameters=myparameters;
NSString *webReturnMessage=[getwebinfo dogetWebInfo];
NSData* jsonData=[webReturnMessage
dataUsingEncoding:NSUTF8StringEncoding];
NSArray *keys = [NSJSONSerialization
JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers error:nil];
allcount=[[keys valueForKey:@"total"] integerValue];
[self.list addObjectsFromArray:[keys valueForKey:@"rows"]]; }
首先 先定义一个上一篇 新建的GetWebInfo类
然后 组合参数...然后就是 调用 获取数据方法获取
然后讲String类型的数据encoding一下(现在看看突然感觉这一步貌似有点重复了..因为dogetwebinfo方法里貌似获取过来的就是NSData类型的了..) 然后是讲NSDATA类型的数据转换成NSArray类型的数据
然后我们就可以直接使用
[keys valueForKey:@"total"]
的方式 读取数据了
这边使用的时候大家可能会碰到 value 也是JSON数组的情况 .
那么就可以 [[keys valueForKey:@"xxx"] valueForKey:@"xx"]这样的方式 或者是下面这种方式
[[_list objectAtIndex:[indexPath row]] valueForKey:@"title"] 好了 是不是很简单啊? 好了 这 篇就讲这么多吧.
个人觉得看了这两章的话应该对网络数据获取以及传输应该就没有问题
下一篇会从如何构建一个登陆界面开始讲起 然后直至一步步完成一个简单的小项目
iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果。
我们选择的测试对象包含下面的这几个框架,其中NSJSONSerialization是iOS5系统新增的JSON解析的API,需要iOS5的环境,如果您在更低的版本进行测试,应该屏蔽相应的代码调用。
- [SBJSON (json-framework)](
- [TouchJSON (from touchcode)](
- [YAJL (objective-C bindings)](
- [JSONKit](https://github.com/johnezang/JSONKit)
- [NextiveJson](https://github.com/nextive/NextiveJson)
-[NSJSONSerialization](
我们选择了四个包含json格式的数据的文件进行测试。每一个文件进行100的解析动作,对解析的时间进行比较。
工程包含以下的文件和框架:
这是外面调用的代码,设置读取的json文件和计算的次数,每一个函数在进行对应框架API的解析代码:【iosjson非标准】
将上面的数据整理成下面的图表:
测试的结果显示,系统的API的解析速度最快,我们在工程项目中选择使用,也是应用较为广泛的SBJSON的解析速度为倒数第二差,令我大跌眼镜。
与系统API较为接近的应该是JSONKit。
这里没有对API的开放接口和使用方式进行比较,若单纯基于以上解析速度的测试:
1:iOS5应该选择系统的API进行
2:不能使用系统API的应该选择JSONKit
【无限互联】iOS开发之AFNetWorking使用方法
一.概况简述
1.相关网络已有AFNetworking资源包的下载。
2.将资源包添加到工程文件里即可。
3.在所需工程文件中添加一行#import “AFNetworking”,便可使用。
4.AFNetworking通过网络来加载和处理结构化的数据,支持JSON,XML,Property List。
注:AFNetWorking使用了ARC ,所以在不使用ARC项目中使用时,对AFNetWorking的所有.m文件添加“-fobjc-arc”;
[objc] view plaincopyprint?
1. NSString *urlstring = @"https://api.weibo.com/2/statuses/home_timeline.json"; 2.【iosjson非标准】
3. NSDictionary *params =
@{@"access_token":@"2.00TSa6WDewTgPDfa63e0f0883oK2XE"}; //构造Request//请求参数的添加//请求参数的格式:/*JSON格式 : AFJSONRequestSerializer &拼接格式 : AFHTTPRequestSerializer*///创建请求参数的格式化对象 [objc] view plaincopyprint? 1. AFHTTPRequestSerializer *requestSerializer = [AFHTTPRequestSerializer serializer];
//构造Request
[objc] view plaincopyprint?
1. NSMutableURLRequest *request = [requestSerializer
requestWithMethod:@"GET" URLString:urlstring parameters:params error:nil]; //构造连接对象
[objc] view plaincopyprint?
1. AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; //设置返回数据的解析方式, 每一种解析方式对应了一个类
/**
JSON解析 : AFJSONResponseSerializer
XML解析: AFXMLParserResponseSerializer
*/
[objc] view plaincopyprint?
1. operation.responseSerializer = [AFJSONResponseSerializer
serializerWithReadingOptions:NSJSONReadingMutableContainers];
//设置数据请求成功、失败调用的block [objc] view plaincopyprint?
1. [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
2. 3. NSLog(@"responseObject = %@",responseObject);
4.
5. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
6. NSLog(@"网络请求失败");
7. }];
//添加到队列,发送请求
[objc] view plaincopyprint?
1. queue = [[NSOperationQueue alloc] init];
2. [queue addOperation:operation];
(1)根据基本的URL构造除完整的一个URL,然后通过这个完整的URL获得一个NSURL对象,然后根据这个url获得一个NSURLRequest。【iosjson非标准】
(2)同AFJSONRequestOperation类,整合网络获取数据并对JSON进行解析。
(3)当请求成功,则运行成功块。将本例解析出来的微博数据从JSON变量转换为一个字典(dictionary),并将其储存在字典中。
(4)若运行出现问题,则运行失败块(failure block),如网络不可用,failure block被调用了,则将会通过一些错误信息打印出来。
//(1)获取请求管理对象 [objc] view plaincopyprint? 1. AFHTTPRequestOperationManager *manager =
[AFHTTPRequestOperationManager manager]; //(2)与GET请求相差不远,此下获取发送POST请求
[objc] view plaincopyprint?
1. NSString *urlstring = @"https://api.weibo.com/2/statuses/update.json";
2. NSDictionary *params = @{
3. @"status":@"tsdlsdfsdf",
4. @"access_token":@"2.00TSa6WDewTgPDfa63e0f0883oK2XE"
5. }; 6. [manager POST:urlstring parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
7. NSLog(@"responseObject = %@",responseObject);
8. } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 9. NSLog(@"网络请求失败");
10. }];
本文来源:http://www.guakaob.com/jianzhugongchengkaoshi/680904.html
下一篇:企业诉讼授权委托书格式