博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS学习之数据解析
阅读量:4541 次
发布时间:2019-06-08

本文共 4251 字,大约阅读时间需要 14 分钟。

解析:按照约定好的格式提取数据的过程叫做解析;
后台开发人员按照约定好的格式存入数据,前端开发人员按照约定的格式读取数据;
主流的格式: XML / JSON 前端和后台都能识别的格式; 

XML解析
XML解析的两种工作原理:
1.SAX解析:基于事件回调的解析机制,逐行进行解析,效率低,适合于大数据解析.  系统提供的NSXMLParser.
1.将通过网络请求或者本地路径获取到的数据存储为NSData对象.2.创建解析工具NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];3.设置代理xmlParser.delegate = self;4.开始解析[xmlParser parse];[xmlParser release];#pragma mark - delegate//当读取到标签后的内容时触发- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {    NSLog(@"读取到内容%@", string);    //用属性str存储读取到的标签内容;    _str = string;}//当读取到开始标签时触发- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {    NSLog(@"开始标签");    if ([elementName isEqualToString:@"Student"]) {        //当读取到开始标签时,创建Student对象.        self.stu = [[[StudentModel alloc] init] autorelease];        //attributeDict 存储节点的属性值        self.stu.position = attributeDict[@"position"];    }    }//当读取到结束标签时触发- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {    NSLog(@"结束标签");    if ([elementName isEqualToString:@"name"]) {        self.stu.name = self.str;    } else if ([elementName isEqualToString:@"gender"]) {        self.stu.gender = self.str;    } else if ([elementName isEqualToString:@"age"]) {        self.stu.age = self.str;    } else if ([elementName isEqualToString:@"motto"]) {        self.stu.motto = self.str;    } else if ([elementName isEqualToString:@"Student"]) {        //读取到Student结束标签时,将Student对象存储到数组中        [self.dataSource addObject:_stu];    }}//当解析完毕时触发- (void)parserDidEndDocument:(NSXMLParser *)parser {    NSLog(@"解析完毕");    //当解析完毕时,让tableView重新刷新一下数据    [self.tableView reloadData];}

 

2.DOM解析:把解析数据读入内存,初始化生成树形结构,逐层进行解析.效率高,适合于小数据解析. 谷歌提供的GDataXMLNode. 
 
解析工具:
GDataXMLNode  是由Google提供的开源的基于C语言的libxml2.dylib动态链接库而封装的OC的XML解析类,效率比较高. 采用DOM解析的原理.
使用GDataXML Nod步骤:
1.target — Build Phases - Link Binary 添加libxml2.dylib
2.target — Build Setting — 搜索 Header Search path 添加 /usr/include/libxml2
 
libxml2.dylib 与 libxml2.2.dylib的区别:
前者是一个快捷方式,永远指向的是最新的类库,而后者才是真实的类库,使用前者有一个好处,当类库更新时,我们老版本的项目无需再重新导入新的类库. 

 
JSON解析:
JsonKit 是通过给NSString, NSData添加分类的形式,增加解析功能.
 
//系统提供的解析JSON方法- (void)handleSystemParser:(UIBarButtonItem *)item {    //1.获取文件路径    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"json"];    //2.根据文件路径初始化NSData对象    NSData *data = [NSData dataWithContentsOfFile:filePath];    //解析    NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];    NSLog(@"%@", arr);}
//第三方类库解析JSON方法(这里使用JSONKit)- (void)handleThirdPartParser:(UIBarButtonItem *)item {        //将Json格式数据转化为OC对象(NSString对象) //1.获取文件路径    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"json"];         //2.根据文件路径初始化字符串对象     NSString *dataStr = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];     //3.解析成OC对象.(可变对象/不可变对象)     NSArray *arr1 = [dataStr objectFromJSONString];     NSArray *arr2 = [dataStr mutableObjectFromJSONString];     NSLog(@"%@",arr1);     NSLog(@"%@", arr2);      }

 


 

选择了解---

当然,也可以解析成NSData对象,第一步的方法都一样,获取文件路径

- (void)handleThirdPartParser:(UIBarButtonItem *)item {        //将Json格式数据转化为OC对象(NSData对象)    //1.获取文件路径    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"json"];     //根据文件路径初始化成NSData对象     NSData *data = [NSData dataWithContentsOfFile:filePath];     //解析.(可变/不可变)     NSArray *arr1 = [data objectFromJSONData];     NSMutableData *arr2 = [data mutableObjectFromJSONData];

 

以上是将JSON数据转为OC的对象,下面是讲OC对象转为JSON数据的方法.

//将OC对象转成JSON格式数据.    //1.将OC的数组对象转成JSON格式数据.    NSArray *arr1 = @[@"aa",@"bb",@"cc",@"dd"];    NSData *jsonData1 = [arr1 JSONData];//转成JSON格式Data    NSString *jsonStr1 = [arr1 JSONString]; //转成JSON格式String        //2.将OC的字典对象转成JSON格式数据.    NSDictionary *dic2 = @{
@"name":@"Frank", @"age":@"18" }; NSData *jsonData2 = [dic2 JSONData];//转成JSON格式Data NSString *jsonStr2 = [dic2 JSONString];//转成JSON格式String

 

 

 

 

转载于:https://www.cnblogs.com/ErosLii/p/4511702.html

你可能感兴趣的文章
BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路 Dijkstra
查看>>
ant简述
查看>>
C#使用CDO发送邮件
查看>>
Oracle中的NVL函数
查看>>
Redis Sentinel机制与用法说明【转】
查看>>
使用NUget发布自己的dll(转)
查看>>
7bit ASCII编解码
查看>>
flask-sqlalchemy(包含离线脚本,with在上下文管理的应用)
查看>>
机器学习工程师 - Udacity 强化学习 Part Ten
查看>>
go语言 新手学习笔记 go基础教程
查看>>
zabbix 添加宏变量
查看>>
中文词频统计
查看>>
Mark一个按照权重生成随机数方法
查看>>
Eclipse中SVN版本信息不显示的问题
查看>>
2016年11月1日——jQuery源码学习笔记
查看>>
[BZOJ]2806: [Ctsc2012]Cheat
查看>>
http报文
查看>>
前端学习记录
查看>>
hdoj 1541 stars(树状数组)
查看>>
引用:WebAPI中的定时处理-使用Quartz.Net
查看>>