iOS- 网络访问JSON数据类型与XML数据类型的实现思路及它们之间的区别
1.JSON (基本上移动开发的主要数据传输都是JSON)
1.1.JSON特点:
a.[] 表示数组
b.{} 表示字典 - 对象模型建立关系
c.应用非常多,基本上移动开发的主要数据传输都是JSON
d. 读取数据时效率高
e.在做实现读取数据时,简单便捷
1.2.实现
要使用JSON,从网络上获取到数据之后使用:
[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
可以将网络数据反序列化为字典或者数组,具体转换类型,看JSON最外面的一个括号
2.XML (主要用于上传一些文件,移动开发时用的不多)
2.1.JSON特点:
* XML
a. 大,解析费劲
b. 解析步骤麻烦,效率低下
c. 直接看XML方便看出数据
2.2.实现
XML解析需要
// 1) 实例化解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 2) 设置代理
parser.delegate = self;
// 3)开始解析
[parser parse];
// 4)调用代理方法
===================================================================
XML解析的六个代理方法
// 1. 开始解析文档,在这里做初始化工作
/**
1. 解析准备工作
- (void)parserDidStartDocument:(NSXMLParser *)parser
2.3.4 三个步骤会循环执行,一直到所有的节点解析完成
2.解析一个节点,即节点中的字典
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
3.负责拼接字符串,查找节点内容,可能会多次
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
4. 节点完成,可以用KVC直接设置对象内容
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
5. 用于收尾工作
- (void)parserDidEndDocument:(NSXMLParser *)parser
6. 解析出错,需要把中间数据清除,以免造成不必要的错误
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
7.当XML格式如下:
<book pages="12" index="1">
<item id="1558" title="仙逆" tag="玄幻" source="/upload/file/2013_07_4/2013718101155179.zip" author="耳根" updatetime="2013-6-21 11:06:17" summary="仙逆............." clicks="86945" words="" logo="/upload/pic/2013_06_5/20136211172503.png" jx="False" />
</book>
可以将所有的属性设置到一个节点中的属性节点中,如此只需要第二步即可。
清澈Saup
最新文章
- Hibernate延迟加载、三种状态、脏检查 缓存
- Add Two Numbers LeetCode Java
- SQL Server安全概念简析
- MVC中使用SignaIR入门教程
- win10应用部署到手机出现问题Exception from HRESULT: 0x80073CFD
- Dataguad RAC配置【一】
- bzoj 1305: [CQOI2009]dance 二分+網絡流判定
- 关于阿里图标库Iconfont生成图标的三种使用方式(fontclass/unicode/symbol)
- java中处理json各种各样转换方法
- centos tree 命令
- angular分页插件tm.pagination 解决触发二次请求的问题
- 基于Spring aop写的一个简单的耗时监控
- springboot热部署(二)——springboot热部署与发布
- c++语言的输入输出流库
- python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)
- Python常用模块--base64
- 深入浅出理解依赖注入这种由外部负责其依赖需求的行为,我们可以称其为 “控制反转(IoC)”
- 淘宝网前端开发面试题(一)--HTML &; CSS 面试题
- TFS二次开发-基线文件管理器(2)-TFS登录
- java学习笔记 --- 多线程(多线程的创建方式)
热门文章
- STM32(13)——SPI
- 20190118-利用Python实现Pig Latin游戏
- 20190112-自定义实现字符串的操作方法,如strip,upper,title,ljust,center,zfill,find,rfind等
- DNS服务器的简介——2
- 常用数字信号的产生(C实现)-均匀分布&;正态分布
- C#、C++、Java、Python 选择哪个好?
- dfs 队列
- Git中分支merge和rebase的适用场景及区别
- 北京Uber优步司机奖励政策(12月2日)
- LiteOS创建任务的一个BUG