一   解析
二 XML数据结构
三 JSON 数据结构
 
 
一 解析
1  定义: 从事先规定好的格式中提取数据
    解析的前提:提前约定好格式,数据提供方按照格式提供数据、数据获取方则按照格式获取数据
 
2  主流的数据交换格式有两种:XML 、JSON
3  iOS 开发常见的解析 :
3.1  XML 解析 :SAX 解析和DOM 解析
       XML 解析工具:NSXMLParser、GDataXMLNode、TouchXML 和 KissXML 等
3.2 JSON 解析
解析工具:JSONKit、NSJSONSerialization、TouchJSON和SBJSON等,其中NSJSONSerialization(系统提供的解析类,性能最好的,解析效率最高)
 
二 XML数据结构
----XML------
1 可扩展标记语言(eXtensible Markup Language):存储数据和传送数组
2 跟 JSON 解析一样,常用于交互数据格式
3 一般 XML 文档 (XML Document)
4 举例 :
    <student> 【标签,表示开始】
        <name>你</name>
        <hobby>女</hobby>
    </student> 【标签,表示结束】
5 XML 文档的语法:
5.1 文档声明:在 XML 文档最前面,必须写一个文档声明
    a 最简单的声明 :<?xml version = "1.0"?>
    b 用encoding 属性,来说明文档字符编码:<?xml version = "1.0" encoding = "UTF-8"?>
5.2 元素(Element):一个元素,会包含一个开始标签和一个结束标签
    a 有所有内容:<name>你</name>
    b 无元素内容:<name></name>
    而且一个元素可嵌套若干个子元素,但不能出现交叉嵌套
<students>
    <student> 【标签,表示开始】
        <name>你</name>
        <hobby>女</hobby>
    </student> 【标签,表示结束】
<stdudents>
    ** 注意 : 1 规范的 XML 文档最多只有一个根元素,其他的都是根元素的子孙元素。
              2 在 XML 中,空格和换行,都会被当做具体内容去处理,例如: a和b 是不一样的
                a <name>你</name>
                b <name>
                    你
                  </name>
5.3 属性(Atribute):一个元素可以拥有多个属性,例如
        <video name="小黄人" hobby="apple"/>【video 元素拥有 name,hobby两个属性】
    *注意 : 属性的值必须用 "" 或者 '' 括住
    *属性表示的信息,也可用子元素来表示,例如:
    <video>
        <name>小黄人</name>
        <hobby>apple</hobby>
    </video>
6 对 XML 文档的解析:
    提取 name 元素里面的内容:<name>小黄人</name>
    或者是提取 video 元素中 name 和 hobby 的值 :<video name="小黄人" hobby="apple"/>
7 ---  SAX 解析 ---- Simple API for XML
SAX: 基于事件驱动的解析方式,逐行解析数据(采用协议回调机制)
NSXMLParser 是 iOS 自带的 XML 解析类,采用 SAX 方式解析数据
解析过程由 NSXMLParserDelegate 协议方法回调
<students>
    <student>
        <name>你</name>
        <hobby>女</hobby>
    </student>
</students>
a 解析方式,逐行进行解析。
a.1 打开 XML 文档
a.2 开始节点(开始标签)
a.3 逐行进行解析
a.4 发现元素里面的内容
a.5 提取内容
a.6 结束节点(结束标签)
a.7 循环开始,直到遇到 根元素的结束标签,解析才彻底结束
 
b iOS 中 XML 解析方式有狠多
b.1 苹果原生: NSXMLParser -- SAX 方式解析,使用简单
b.2 第三方框架:
    1 libxm12 : 纯 C 语言,默认被包含进了 iOS SDk
    2 GDataXML :DOM 的解析方式,是由谷歌开发的,底层基于 libxml2
 
 
8 ---DOM 解析----
 
a Document Object Model (文档对象模型),将整个 XML 文档读入,将构建驻留内存的树结果(节点数),通过遍历树结构的任意XML节点,读取它的属性和值,而且通常情况下,可以借助XPath,直接查询 XML 节点
b 步骤:
b.1 获取 GDataXMLNode.h/m 文件,将 GDataXMLNode.m 添加到所需工程
b.2 添加类库 libxml2.tbd 到工程中    libxml2.dylib(iOS7 之前)
b.3 在工程中的“Build settings”页面中找到“Header search path”项,添加 /usr/include/libxml2
b.4 导入 GDataXMLNode.h 文件到头文件中,如编译成功,则 GDataXMLNode 添加成功
 
c 属性和方法
name 取标签名
attributeForName 取属性节点
stringValue 取标签间的字符串
rootElement 子节点
 
三 JSON 数据结构
1 JSON (JavaScript Object Notation) ,轻量级的数据交换格式,是基于 JS 的一个子集,是完全采用独立语言的文本格式,容易阅读和编写,易于机器解析和生成,非常适合于服务器和客户端的交互
2 注意: 标准的JSON格式:Key 必须使用双引号
3 JSON 数据结构的语法
3.1中的数据类型 : 字符串、数值、BOOL、对象、数组
3.2文件中有两种结构:
对象 、数组
3.3 JSON - OC : 两者对应的数据类型
    a JSON 中的大括号 {},在OC 中 NSDictionary
    b JSON 中的方括号 [], 在OC 中表示 NSArray
    c JSON 中的双引号 "", 在OC 中表示 NSString
4 JSON 数据结构的功能
数据交换、内容管理、配置文件
5 在 iOS 中常见的 JSON 解析方式:
 5.1 原声(自带):NSJSONSerialization(性能最好的)
          NSJSONSerialization 里面包含了两个方法来通过不同数据形式解析JSON数据
5.1.1  +JSONObjectWithData: options: error: 使用缓冲区数据解析JSON
5.1.2  +writeJSONObject: toStream: options: error: 使用文件流的行式解析JSON
 5.2 第三方:JSONKit、SBJSON、TouchJSON(依次从左到右,越来越差)
objectFromJSONData
四 XML 与 JSON 两种数据结构的优缺点
1.XML与JSON两种数据结构的优缺点

1> XML
 优点:\u2028

  • 格式统一, 符合标准\u2028

  • 容易与其他系统进行远程交互, 数据共享比较方便

\u2028 缺点:

  • XML文件格式文件庞大, 格式复杂, 传输占用带宽\u2028

  • 服务器端和客户端都需要花费大量代码来解析XML, 不论服务器端和客户端代码变的异常复杂和不容易维护

  • 客户端不同,浏览器之间解析XML的方式不一致, 需要重复编写很多代码\u2028

  • 服务器端 和 客户端 解析XML花费资源和时间

2> JSON
 优点:\u2028

  • 数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小\u2028

  • 易于解析这种语言

  • 支持多种语言, 包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等语言服务器端语言, 便于服务器端的解析\u2028

  • 因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护\u2028

 缺点:\u2028

  • 没有XML格式这么推广的深入人心和使用广泛, 没有XML那么通用性\u2028

  • JSON格式目前在Web Service中推广还属于初级阶段

2.JSON、XML解析方式的底层实现

 1> XML

  Xml两种解析方式,DOM 和 SAX。

  DOM 需要读入整个XML文档(文档驱动),SAX 是事件驱动的,并不需要读入整个文档,文档的读入过程也就是SAX的解析过程。

  SAX 简单地说就是对XML文档进行顺序扫描,当扫描到 文档 的 开始 与 结束 ,元素(element)的 开始 与 结束 时,就会触发相应的事件处理 函数,由事件处理函数做相应的动作,处理完后继续扫描,直到文档结束,则解析完毕

  DOM 解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许你使用 DOM API 操作 XML 树。也就是说,DOM 会把XML以 树 的形式读取到内存中,然后在通过相应的 API 来操作这个 XML树,从而达到解析XML文件的目的

 2> JSON

  json底层原理 遍历字符串中的字符,最终根据特助字符,比如{},[],:号等进行区分,{}是字典,[]表示的是数组,:号是字典的键和值的分水岭,最后是将json数据转化为字典,然后使用 KVC 将字典转为 model

3 选择推荐

1)对于复杂的数据结构使用XML,简单的数据结构可采用JSON。

2)在互联网应用中数据传输中,提倡使用JSON。

 
3)针对前后端的差异,可以在服务端使用XML,在前端使用JSON,两者之间的转换在服务器端完成。这样可以各取所长
 

数据解析(XML和JSON数据结构)的更多相关文章

  1. IOS 请求数据解析 XML 和 JSON

    好久没写文章了,回忆一下以前的内容记录一下吧. 这一段主要接触的就是数据解析,就说一下数据解析 现在数据解析一般解析两种数据 xml 和 JSON 那就从xml解析说起吧 xml解析需要用到一个类 N ...

  2. boost-使用property_tree来解析xml、json

    property_tree是一个保存了多个属性值的树形数据结构,可以用来解析xml.json.ini.info文件.要使用property_tree和xml解析组件的话需要包含"boost/ ...

  3. Python解析xml与JSON

    xml与json是常用的文件交换格式,常用来表示网页的html则是xml的变种.解析xml和json在web开发中有着重要应用. DOM解析XML 文件对象模型(Document Object Mod ...

  4. ios解析XML和json数据

    解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数 ...

  5. UI:数据的解析XML与JSON

    XML  和  JSON 语言  本篇博客来自互联网参考 XML 和 JSON 的互相转化 有属性的转化为对象,无属性的转化为字符串 节点的顺序性不可逆,XML有顺序,JSON 无顺序 XML 和 J ...

  6. android基础篇------------java基础(11)(文件解析xml and Json )

    一:xml文件解析 首先看一下:我们要解析的内容: <?xml version="1.0" encoding="gbk" ?> - <book ...

  7. 个人永久性免费-Excel催化剂功能第90波-xml与json数据结构转换表格结构

    在网络时代,大量的数据交互以xml和json格式提供,特别是系统间的数据交互和网络WebAPI.WebService接口的数据提供,都是通过结构化的xml或json提供给其他应用调用返回数据.若能提供 ...

  8. c# json数据解析——将字符串json格式数据转换成对象

    网络中数据传输经常是xml或者json,现在做的一个项目之前调其他系统接口都是返回的xml格式,刚刚遇到一个返回json格式数据的接口,通过例子由易到难总结一下处理过程,希望能帮到和我一样开始不会的朋 ...

  9. Flex与Java交互(Flex调用java类展示数据)解析xml展示数据

    Flex与java通信最简单例子(详细说明了各种需要注意的配置):http://blog.csdn.net/u010011052/article/details/9116869 Flex与java通信 ...

随机推荐

  1. 使用AjaxPro实现无刷新更新数据

    需求 在一个页面动态无刷新的更新后台得到的数据.要想无刷新的更新数据,需要使用Javascript能够获取后台返回的数据,然后通过第三方Javascript库(JQuery等)动态更新web页面DOM ...

  2. runtime学习实战一:类的属性进行归档解档

    #import <Foundation/Foundation.h> @interface PYPerson : NSObject @property (nonatomic, assign) ...

  3. Dojo的Gridx使用jsonrest需要注意的地方

    在使用gridx时,如果要使用jsonrest,主要的工作主要是在服务端,服务端在返回数据时,必须在返回头里添加Content-Range: 0-9/73 属性和值,其中0表示从第0条记录开始,9表示 ...

  4. C#类的继承,方法的重载和覆写

    在网易云课堂上看到唐大仕老师讲解的关于类的继承.方法的重载和覆写的一段代码,注释比较详细,在此记下以加深理解. 小总结: 1.类的继承:允许的实例化方式:Student t=new Student() ...

  5. Dapper学习笔记(4)-事务

    Dapper中对事务的处理也非常简单,如下代码所示: private void DapperTransaction() { using (IDbConnection con = OpenConnect ...

  6. Theoretical comparison between the Gini Index and Information Gain criteria

    Knowledge Discovery in Databases (KDD) is an active and important research area with the promise for ...

  7. .NET/android/java/iOS AES通用加密解密(修正安卓)

    移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...

  8. Java学习1 - java 历史

    Sun的Java语言开发小组成立于1991年,其目的是开拓消费类电子产品市场,例如:交互式电视,烤面包箱等.Sun内部人员把这个项目称为 Green,那时World Wide Web还在图纸上呢.该小 ...

  9. PYTHON 链接 Oracle

    一.  cx_Oracle Python 连接Oracle 数据库,需要使用cx_Oracle 包. 该包的下载地址:http://cx-Oracle.sourceforge.net/ 下载的时候,注 ...

  10. 进程间通信 System V 消息队列

    1.msgget (key_t ket,int flag) ; //创建一个新的消息队列或者访问一个已存在的消息队列 2.msgsnd(int msid, const void *ptr ,size_ ...