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

后台开发人员按照约定好的格式存入数据,前端开发人员按照约定的格式读取数据;
主流的格式: 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. github使用入门 之GIT GUI Windows版

    申明下是原创. 这二天网上也看了不少关于github使用的文章,github对代码管理也开始用起来了.这篇给github新手看,大牛们请跳过. github说白了就是版本管理库,最常用的就是程序代码管 ...

  2. nodejs定时任务node-schedule

    1:使用npm安装node-schedule模块 npm install node-schedule (1)每隔5分钟执行一次: var schedule = require('node-schedu ...

  3. Building Web Apps with SignalR, Part 1

    Building Web Apps with SignalR, Part 1 In the first installment of app-building with SignalR, learn ...

  4. 【转】在Ubuntu 12.04 上为Virtualbox 启用USB 设备支持--不错

    原文网址:http://www.cnblogs.com/ericsun/archive/2013/06/10/3130679.html 虚拟机我一直在用,不是说离不开Windows,而是有些时候一些应 ...

  5. Android读取Assert文件夹下txt文本并变为String的方法

    使用场景,在assert文件夹下 有些文本文件,我们需要通过工具类读取出来,然后放到String字符串中,我们该如何操作呢: 直接上代码: 使用方法: MyActivity.readAssertRes ...

  6. [LeetCode] 45. Jump Game II 解题思路

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. 查看ip地址信息和配置临时ip

    查看ip地址信息:ifconfig –a 配置临时ip: ifconfig eth0 192.168.11.107

  8. RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny

     一,RTX51 Tiny简单介绍    RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的 ...

  9. [置顶] SQL注入问题

    我们做系统,有没有想过,自己的容量很大的一个数据库就被很轻易的进入,并删除,是不是很恐怖的一件事.这就是sql注入. 一.SQL注入的概念         SQL注入攻击指的是通过构建特殊的输入作为参 ...

  10. 实战:推断mysql中当前用户的连接数-分组筛选

    #connets.sh #!/bin/sh #ocpyang@126.com #依据输入參数u或d来显示出相应的username或数据库名中用户的连接数. #也能够输入u 详细username或d 详 ...