iOS基础 - XML & JSON
一、HTML & XML
HTML
是用来描述网页的一种语言
HTML 指的是超文本标记语言 (Hyper Text Markup Language)
HTML 不是一种编程语言,而是一种标记语言 (markup language)
HTML 被设计用来显示数据
HTML5
是下一代的 HTML
增加了用于绘画的 canvas 元素
用于媒介回放的 video 和 audio 元素等等
XML
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输和存储数据,而非显示数据
二、XML & JSON 简介
JSON
作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式
基于JavaScript的一个子集
易读性略差,编码手写难度大,数据量小
JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中
XML
可扩展标记语言
用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言
易读性高,编码手写难度小,数据量大
三、JSON格式说明
对象: {} 括起来的内容
数据结构为 {key:value,key:value,...}的键值对的结构
可以反序列化为OC中的NSDictionary
数组: []括起来的内容
数据结构为 ["java","javascript","vb",...]
可以反序列化为OC中的NSArray
序列化:在传输之前,将对象转换成有序的字符串或者二进制数据流
反序列化:将接收到的字符串或者二进制数据流转换成对象或者数组,以便程序访问
四、解析服务器端返回的JSON数据
作为一种轻量级的数据交换格式,JSON正在逐步取代XML,成为网络数据的通用格式
从iOS 5开始,使用NSJSONSerialization对JSON解析
其他常见的三种JSON解析第三方库:
SBJson
JSONKit
TouchJson
从性能上来说,NSJSONSerialization最好,JSONKit次之,SBJson使用较为广泛,API简单易用
JSON是轻量级的数据交换格式,正逐步取代XML,成为通用网络数据格式
使用类方法JSONObjectWithData:options:error:可以将接收到的JSON数据反序列化为NSArray或NSDictionary等对象
技巧:
将加载内容反序列化为JSON后,可以先保存至plist文件,以便后续操作
由于是网络应用,不要使用UIImage的同步加载方法设置ImageView的内容,否则容易造成应用阻塞,影响用户体验
加载网络图片使用的第三方框架SDWebImage,官网地址: https://github.com/rs/SDWebImage
五、NSXMLParser解析方法
NSXMLParser是SAX方法解析
SAX(Simple API for XML)
只能读,不能修改,只能顺序访问,适合解析大型XML,解析速度快
常应用于处理大量数据的XML,实现异构系统的数据访问,实现跨平台
从文档的开始通过每一节点移动,定位一个特定的节点
DOM(Document Object Model)
不仅能读,还能修改,而且能够实现随机访问,缺点是解析速度慢,适合解析小型文档
一般应用与小型的配置XML,方便操作
为载入到内存的文档节点建立类型描述,呈现可横向移动、潜在巨大的树型结构
在内存中生成节点树操作代价昂贵
六、NSXMLParser解析过程
1. 创建NSXMLParser实例,并传入从服务器接收的XML数据
2. 定义解析器代理
3. 解析器解析
4. 通过解析代理方法完成XML数据的解析
七、NSXMLParser解析代理方法
// 1. 开始解析XML文档
- (void)parserDidStartDocument:
// 2. 开始解析某个元素,会遍历整个XML,识别元素节点名称
- (void)parser:didStartElement:namespaceURI:qualifiedName:attributes:
// 3. 文本节点,得到文本节点里存储的信息数据,对于大数据可能会接收多次!为了节约内存开销
- (void)parser:foundCharacters:
// 4. 结束某个节点,存储从parser:foundCharacters:方法中获取到的信息
- (void)parser:didEndElement:namespaceURI:qualifiedName:
注意:在解析过程中,2、3、4三个方法会不停的重复执行,直到遍历完成为止
// 5. 解析XML文档结束
- (void)parserDidEndDocument:
// 6. 解析出错
- (void)parser:parseErrorOccurred:
iOS基础 - XML & JSON的更多相关文章
- iOS开发——XML/JSON数据解析
NSJSONSerialization 接下来就正式开始.苹果官方给出的解析方式是性能最优越的,虽然用起来稍显复杂. 首先我们在上面已经有了我希望得到的信息的网站的API给我们的URL,在OC中,我要 ...
- iOS开发笔记3:XML/JSON数据解析
这篇主要总结在iOS开发中XML/JSON数据解析过程用到的方法.XML数据解析主要使用SAX方式的NSXMLParser以及DOM方式的GDataXML,JSON数据解析主要使用NSJSONSeri ...
- ios解析XML和json数据
解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数 ...
- iOS开发之JSON格式数据的生成与解析
本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...
- 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)
一: iOS中xml解析的几种方式简介 1.官方原生 NSXMLParser :SAX方式解析,使用起来比较简单 2.第三方框架 libxml2 :纯C 同时支持DOM与SAX GDataXML: D ...
- iOS基础问答面试
<简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...
- 在ios中解析json数据
刚刚下午那会 弄了个 解析 xml demo的小例子,本想着json也挺复杂 弄还是 不弄,但是简单的看了下 发现挺简单 考虑了很久,还是写上来吧,毕竟json用得太多了,而且算是自己的积累吧,毕竟 ...
- Java基础-处理json字符串解析案例
Java基础-处理json字符串解析案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 作为一名开发人员,想必大家或多或少都有接触到XML文件,XML全称为“extensible ...
- iOS 基础入门--Bull' Eye 小游戏
说明 Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...
随机推荐
- C面试题
1.sizeof()和strlen()使用? 答案: 1.从功能定义,strlen功能,要查找字符串的长度,sizeof功能是用来寻找指定的变量或变量类型的存储器占用 尺寸: 2.sizeof是运算符 ...
- 我的MYSQL学习心得(一)
原文:我的MYSQL学习心得(一) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL ...
- MySQL当您插入列无效的数据插入
1.错误叙述性说明 com.mysql.jdbc.exception:jdbc4.MySQLSyntaxErrorException:Unknown column 'man' in 'field li ...
- POJ 3013 Big Christmas Tree(最短Dijkstra+优先级队列优化,SPFA)
POJ 3013 Big Christmas Tree(最短路Dijkstra+优先队列优化,SPFA) ACM 题目地址:POJ 3013 题意: 圣诞树是由n个节点和e个边构成的,点编号1-n. ...
- JS通用方法扩展
/* * 系统中JS的扩展函数 * * */ // 清除两边的空格 String.prototype.trim = function() { returnthis.replace(/(^\s*)|(\ ...
- 熊猫猪新系统測试之三:iOS 8.0.2
本来本猫要等到8.1版本号出来后再做測试的,结果等来等去就是迟迟不推送更新呀!说好10月20号的iOS 8.1呢?为了一鼓作气写完,就先不等了.先拿手头的iOS 8.0.2系统做一下測试吧! 8.x系 ...
- Struts2.0+Spring3+Hibernate3(SSH~Demo)
Struts2.0+Spring3+Hibernate3(SSH~Demo) 前言:整理一些集成框架,发现网上都是一些半成品,都是共享一部分出来(确实让人很纠结),这是整理了一份SSH的测试案例,完全 ...
- 对[yield]的浅究到发现[async][await]
原文:对[yield]的浅究到发现[async][await] 上篇对[foreach]的浅究到发现[yield]写完后,觉得对[yield]还没有理解清楚,想起曾经看过一位大牛的帖子讲的很深刻(链接 ...
- SQL Server 得到SPID,唯一的sessionID
像.net中的session一样,假设能知道了数据库中的sessionID,那全部的操作都能知道了,由于有了这个唯一的身份识别的标识. 能够做的事情有非常多,如:当前哪个用户在做什么操作,在运行什么s ...
- 谈论quick-cocos2d-x和cocos2d-x lua了解差异
之前说,我把这个两个词区别.经过太长时间.当然,反击的麻烦.quick-cocos2d-x它提到quick,cocos2d-x lua姑且称为本地lua对. 我认为,首先与这两个小的朋友接触会跟着或多 ...