解析:按照约定好的格式提取数据的过程叫做解析;

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

XML解析
XML解析的两种工作原理:
1.SAX解析:基于事件回调的解析机制,逐行进行解析,效率低,适合于大数据解析.  系统提供的NSXMLParser.
.将通过网络请求或者本地路径获取到的数据存储为NSData对象.
.创建解析工具
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];
.设置代理
xmlParser.delegate = self;
.开始解析
[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"];
} }
//当读取到结束标签时触发</Student>
- (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":@""
};
NSData *jsonData2 = [dic2 JSONData];//转成JSON格式Data
NSString *jsonStr2 = [dic2 JSONString];//转成JSON格式String

iOS学习之数据解析的更多相关文章

  1. iOS学习——JSON数据解析(十一)

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

  2. iOS学习—JSON数据解析

      关于在iOS平台上进行JSON解析,已经有很多第三方的开源项目,比如TouchJson,JSONKit,SBJon等,自从iOS5.0以后,苹果SDK推出了自带的JSON解决方案NSJSONSer ...

  3. iOS学习之数据请求

    GET请求----同步连接 //GET请求 同步连接 - (void)handleSynchronize:(UIBarButtonItem *)item { //GET请求 //1.创建网址字符串; ...

  4. 【iOS】Plist-XML-JSON数据解析

    网络上数据传输通用的有XML.JSON等,iOS中也能够用Plist. 要进行传输数据.就要首先进行序列化: 1.序列化.  对象转换成二进制流.(这个一句话即可) .反序列化. 二进制流转换为对象等 ...

  5. iOS学习笔记--数据存储

    iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data 1. XM ...

  6. iOS 学习 - 22 异步解析 JSON,使用 FMDB 存储,TableView 显示

    前提是已经知道了有哪些 key 值 Model 类: .h @interface ListModel : NSObject @property (nonatomic, copy)NSString *t ...

  7. ios网络_json数据解析

    网络上数据传输以json或者xml格式. json是字典 或者 数组 或者字典跟数组嵌套的形式.解析json就是把json反序列化(解析)---把json转换为oc对象.json序列化就是把oc对象转 ...

  8. iOS学习之数据持久化详解

    前言 持久存储是一种非易失性存储,在重启设备时也不会丢失数据.Cocoa框架提供了几种数据持久化机制: 1)属性列表: 2)对象归档: 3)iOS的嵌入式关系数据库SQLite3: 4)Core Da ...

  9. 【原】iOS学习之UIStoryboardSegue解析

    在 Storyboard 的可视化编程中,跳转界面就是按住 Ctrl 使用鼠标头一条连线就可以解决,相当的简单!本篇博客主要就是介绍这条连线,在iOS中,这条连线也是一个对象,也有其自己的初始化方法和 ...

随机推荐

  1. 转:socket通信简介

    转:http://blog.csdn.net/xiaoweige207/article/details/6211577/ 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页 ...

  2. API认证方法一览

    Open api authentication Amazon DigitalOcean Webchat Weibo QQ Amazon Web Services HMAC Hash Message A ...

  3. PL/SQL 包头和包体

    包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成,包规范用于定义公用的常量 变量,过程和函数,在SQL*PLUS中建立包规范可以使用CREATE PACKAGE命令. 实例如下: CREAT ...

  4. 【HDOJ】1057 A New Growth Industry

    纯粹的模拟题目. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 20 # ...

  5. BZOJ3392: [Usaco2005 Feb]Part Acquisition 交易

    3392: [Usaco2005 Feb]Part Acquisition 交易 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 26  Solved:  ...

  6. 自写 jQuery 大幅弹窗广告插件(不喜勿拍)

    最近写了做的两个项目都要做几乎同一件事,在首页弹出一个广告.本来是想在网上找一个的,找了几个,花了时间但都不怎么满意,尼玛呀,坑爹呀…… 最后一想,干脆自己动手了. 第一次写,在网上找一些例子来看. ...

  7. HDOJ 1393 Weird Clock(明白题意就简单了)

    Problem Description A weird clock marked from 0 to 59 has only a minute hand. It won't move until a ...

  8. HDOJ 1070 Milk(水题,考英文的)

    Problem Description Ignatius drinks milk everyday, now he is in the supermarket and he wants to choo ...

  9. C++中的四种转型操作符

    在具体介绍C++中的四种转型操作符之前,我们先来说说旧式转型的缺点: ①它差点儿同意将不论什么类型转换为不论什么其它类型,这是十分拙劣的.假设每次转型都可以更精确地指明意图,则更好. ②旧式转型难以辨 ...

  10. 我的创业劲儿,无可阻挡-JAVA学院张孝伟

    导语:张孝伟,这个怀揣着创业梦想的农村小伙,为了报答父母的恩情,他开启了自己的逐梦之旅.友好的伙伴,火旺的生意.以前让他如鱼得水.就在他满足于现状的时候,一场突如其来的事故,让他一夜间倾家荡产.他是否 ...