iOS网络-02-数据解析(JSON与XML)
数据交互格式
- 服务器返回给用户的数据,通常是以下两种方式:
- JSON
- XML
- JSON
- 一种轻量级的数据数据格式,体积比XML小,是服务器返回给移动端通常采用的格式
- 用使用JSON文件中的数据,需要对其进行解析,苹果的NSJSONSerialization解析性能最好
- iOS中的JSON文件解析,是将其转换成OC对象,如下:
- 大括号{} --> 字典NSDictionary
- 中括号[] --> 数组NSArray
- 双引号"" --> 字符串NSString
- 数字 --> NSNumber
- JSON通常使用NSJSONSerialization进行解析,性能最好
- XML
- XML(Extension Markup Language),可扩展标记语言
- 是服务器返回客户端常用的一种数据格式
- XML文档,通常包含以下内容
- 文档声明
- 元素(element)
- 属性(attribute)
- XML文档的解析方案
- 小文件:NSXMLParser苹,果原生
- 大文件:GDataXML,Google开发,基于libxml2
JSON解析
解析类型
- 默认解析NSDictionary与NSArray类型的数据
- 若要解析NSString类型的数据,需要使用NSJSONReadingAllowFragments参数
一个对象通常要遵循以下规则才能转换成JSON文档
- 根节点是NSDictionary或NSArray类型
- 所有的对象必须是NSString、NSNumber、NSArray、NSDictionary或NSNull中的一种
- 对象个数有限
JSON数据与OC对象的转化
- JSON --> OC
+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error
/**
* data:需要解析的NSData类型数据
* opt:解析方式
* error:错误信息
*/
- OC --> Json
+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error
/**
* obj:需要转换的OC对象
* opt:解析方式
* error:错误信息
*/
解析NSString
NSString *json = "I am a coder";
[NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil]
/**
* JSON解析的数据通常是使用NSUTF8StringEncoding编码的NSData类型数据
* options:指定可以解析的类型,NSJSONReadingAllowFragments表示可以解析 NSString对象
* error:返回解析错误信息
* 返回值为解析完成的NSString对象
*/
解析NSDictionary与NSArray(来自服务器的数据)
/**Block的方式发送请求*/
//创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:(此处为请求路径)];
//发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
}];
/**
* queue:请求任务所在的队列
* completionHandler:请求完成回调的Block
* response:服务器的响应信息
* data:服务器返回的数据
* error:错误信息
* 将data解析成对应的NSDictionary对象
*/
XML解析
小文件解析(NSXMLParser)
- 通过NSXMLParser解析XML文档,需要用到代理协议NSXMLParserDelegate
- NSXMLParserDelegate协议的常用方法
// 1. 开始解析XML文档的时候调用
- (void)parserDidStartDocument:(NSXMLParser *)parser
// 2. 解析到XML文档中某个元素的开始的时候调用,解析任务的核心
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict
/**
* elementName:正在解析的元素的名字
* attributeDict:解析生成的OC对象
*/
// 3. 解析到XML文档中某个元素的结束的时候调用
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName
// 4. 解析到XML文档结尾的时候调用
- (void)parserDidEndDocument:(NSXMLParser *)parser
- 解析步骤
// 1. 创建解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 2. 设置代理
parser.delegate = self;
// 3. 启动解析器
[parser parse];
// 4. 在代理方法中完成具体的解析任务
大文件解析(GDataXML)
- 与GDataXML相关的几个类
- GDataXMLDocument,整个XML文档
- GDataXMLElement,XML文档中的一个元素
- 解析步骤
// 1. 将XML文档数据,转换成GDataXMLDocument类型的对象
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
// 2. 获取GDataXMLDocument对象中根节点的所有元素
NSArray *elements = [document.rootElement elementsForName:@"此处为元素的名字"];
/**
* 获取XML文档中指定名字的所有元素
*/
// 3. 解析每个元素中的数据
for (GDataXMLElement *ele in elements)
{
[ele attributeForName:@"此处为元素中的Key"].stringValue;
/**
* 解析元素ele中键值为Key的属性值,将其转化为字符串对象
*/
}
- 与GDataXML相关的几个类
iOS网络-02-数据解析(JSON与XML)的更多相关文章
- ios网络_json数据解析
网络上数据传输以json或者xml格式. json是字典 或者 数组 或者字典跟数组嵌套的形式.解析json就是把json反序列化(解析)---把json转换为oc对象.json序列化就是把oc对象转 ...
- OC - 13.数据解析(JSON与XML)
##数据交互格式 服务器返回给用户的数据,通常是以下两种方式: JSON XML JSON 一种轻量级的数据数据格式,体积比XML小,是服务器返回给移动端通常采用的格式 用使用JSON文件中的数据,需 ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android网络之数据解析----使用Google Gson解析Json数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- C#解析json和xml数据
C#解析json和xml数据 // 用到的包using Newtonsoft.Json; // using Newtonsoft.Json.Linq; const string value = &qu ...
- Ajax--PHP+JQuery+Ajax解析json、XML数据、加载页面
一.JQuery+Ajax用get.post方式提交和请求数据 知识要点: $('#userName').blur(function () { var txt = $(this).val(); $.a ...
- Java数据解析---JSON
一.Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1.键值对类型 { ...
- iOS多线程与网络开发之解析json数据
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. // 同步发送信息 2 NSData *data = [NSURLConnection sendSynchronousRequest:request r ...
- IOS数据解析JSON
//非原创 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSO ...
随机推荐
- 伸展树(三)之 Java的实现
概要 前面分别通过C和C++实现了伸展树,本章给出伸展树的Java版本.基本算法和原理都与前两章一样.1. 伸展树的介绍2. 伸展树的Java实现(完整源码)3. 伸展树的Java测试程序 转载请注明 ...
- 启动weblogic的错误:Could not obtain an exclusive lock to the embedded LDAP data files directory
http://hi.baidu.com/kaisep/item/0e4bf6ee5da001d1ea34c986 源地址 启动weblogic的错误:Could not obtain an exclu ...
- NativeScript工作原理
NativeScript是一个runtime,它提供一些机制可以使用JavaScript构建原生的IOS.Android甚至WP(未来会加入)应用.NativeScript有很多非常酷的功能,比如MV ...
- Hadoop入门进阶课程7--Pig介绍、安装与应用案例
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan ...
- iOS-设计模式-懒加载
一.为什么要懒加载? 答: iPhone设备内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么久可能会耗尽iOS设备的内存.这些资源例如大量的数据,图片,音频,过多的控件等. 二.懒加 ...
- 2 Servlet基础
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 1. 从浏览器访问Servlet的流程 刚才发现,这里的图片不能正常显示,所以我给个链接,大家可以下载下来看从浏 ...
- Android的init过程(二):初始化语言(init.rc)解析
Android的init过程(一) 本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 在上一篇文章中介绍了init的初始化第一阶段,也就是处理各种属性.在本文将会详细分析i ...
- [C#] 可空类型的实现原理
int? 是可为null的值类型.只比int多一个值就是null. 思考: 同样的内存空间,怎么实现的多一个值的?都是4字节,32位,int?靠什么存在一个null值的. 发现: 分析一下内存,看看如 ...
- Gradle学习系列之二——创建Task的多种方法
在本系列的上篇文章中,我们讲到了Gradle入门,在本篇文章中我们将讲到创建Task的多种方法. 请通过以下方式下载本系列文章的Github示例代码: git clone https://github ...
- 循序渐进开发WinForm项目(2)--项目代码的分析
随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...