随着移动互联网时代的到来,越来越多的App客户端都需要和网络服务器或者其他客户端进行数据传输和交互,承担App与网络来进行传输和存储数据的格式一般是XML或者JSON。所以我们很有必要了解一下JSON和XML
一、XML介绍
1.简介:
Extensible Markup Language,可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具,是业界公认的标准。
2.特点:
- XML是一种标记语言,很类似HTML
- XML的设计宗旨是传输数据,而不是显示数据
- XML只是纯文本,不过能够读懂XML的应用程序可以有针对性地处理XML的标签
- XML标签没有预定义,需要自定义标签
- XML具有自我描述性(即包含一个文档类型声明,不仅有助于程序员阅读,还有利于计算机识别处理)
3.语法规则
1. 开始创建 XML 文件(可选)
XML 文档的第一行可以是一个 XML 声明。这是文件的可选部分,它将文件识别为 XML 文件,有助于工具和人类识别 XML,可以将这个声明简单地写成 < ?xml?>,或包含 XML 版本(< ?xml version=”1.0”?>),甚至包含字符编码,比如针对 Unicode 的 < ?xml version=”1.0” encoding=”utf-8”?>。因为这个声明必须出现在文件的开头,所以如果打算将多个小的 XML 文件合并为一个大 XML 文件,则可以忽略这个可选信息。
2.XML 标签对大小写敏感
XML 标签对大小写敏感。在 XML 中,标签 与标签 是不同的。必须使用相同的大小写来编写打开标签和关闭标签。
3.XML 必须正确地嵌套
在 HTML 中,常会看到没有正确嵌套的元素,在 XML 中,所有元素都必须彼此正确地嵌套。
4.XML 文档必须有根元素
XML 文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
5.XML 的属性值须加引号
与 HTML 类似,XML 也可拥有属性(名称/值的对)。在 XML 中,XML 的属性值须加引号。
6.在 XML 中,空格会被保留
7.实体引用
在 XML 中,一些字符拥有特殊的意义。如果你把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始,这样会产生 XML 错误。为了避免这个错误,请用实体引用来代替 “<” 字符。
实体引用 | 符号 | 含义 |
---|---|---|
& lt; | < | 小于 |
& gt; | > | 大于 |
& amp; | & | 和号 |
& apos; | ‘ | 单引号 |
& quot; | “ | 引号 |
4.XML节点
当我们在处理XML文件的时候必须要明白XML节点的概念,就像一个树状的目录。可以把第一行当作它扎根的“土地”。XML文件是由节点构成的。它的第一个节点为“根节点”。一个XML文件必须有且只能有一个根节点,其他节点都必须是它的子节点。
this 代表整个XML文件,它的根节点就是 this.firstChild 。 this.firstChild.childNodes 则返回由根节点的所有子节点组成的节点数组。
每个子节点又可以有自己的子节点。节点编号由0开始,根节点的第一个子节点为 this.firstChild.childNodes[0],它的子节点数组就是this.firstChild.childNodes[0].childNodes 。
根节点第一个子节点的第二个子节点 this.firstChild.childNodes[0].childNodes[1],它返回的是一个XML对象(Object) 。这里需要特别注意,节点标签之间的数据本身也视为一个节点 this.firstChild.childNodes[0].childNodes[1].firstChild ,而不是一个值。
我们解析XML的最终目的当然就是获得数据的值:this.firstChild.childNodes[0].childNodes[1].firstChild.nodeValue 。注意!不是 this.firstChild.childNodes[0].childNodes[1].nodeValue !节点名称有时也是我们需要的数据: this.firstChild.childNodes[0].childNodes[1].nodeName 。注意比较获得节点名称和节点值的不同。
二、JSON介绍
1.简介:
JavaScript对象表示法(JavaScript Object Noatation),是存储和交换文本信息的语法,一种轻量级的数据交换格式。现在JSON的光环已经逐渐在超越XML,成为新的流行格式。
2.特点:
- JSON是轻量级的文本数据交换格式。
- JSON独立于语言和平台。
- JSON具有自我描述性。
- 于XML相比没有,结束标签,更短,更快,使用数组,不使用保留字。
3.JSON 名称(key)/值(value)对:
每一个JSON数据里面的内容就是靠名称(key)/值(value)对来表达。名称(key)/值(value)对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"firstName" : "John"
4.JSON 值
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
JSON 对象
JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{ "firstName":"John" , "lastName":"Doe" }
JSON 数组
JSON 数组在方括号中书写:
数组可包含多个对象:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }]
}
三、XML与JSON对比
1.XML的优缺点
优点
- 格式统一,符合标准,在要求严格的场合有优势;
- 容易与其他系统进行远程交互,数据共享比较方便。
缺点
- XML文件庞大,文件格式复杂,传输占带宽大。
- 服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护。
2.JSON的优缺点
优点
- 相当于只是一行字符串,没有结束标签,数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
- 因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
- 支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析.
- 在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取.
缺点
- 没有XML格式这么推广的深入人心和使用广泛, 没有XML那么通用。
3.区别对比
(1)可读性方面:基本相同,xml的可读性比较好。
(2)可扩展性方面:都具有很好的扩展性。
(3)编码难度方面:相对而言:JSON的编码比较容易。
(4)解码难度:json的解码难度基本为零,xml需要考虑子节点和父节点。
(5)数据体积方面:json相对于xml来讲,数据体积小,传递的速度跟快些。
(6)数据交互方面:json与JavaScript的交互更加方面,更容易解析处理,更好的数据交互。
(7)数据描述方面:xml对数据描述性比较好,常用于做配置文档。
(8)传输速度方面:json的速度远远快于xml。
4.总结:
如果选择用来传输数据或者储存结构不是超级复杂的数据的话,建议使用JSON,因为JSON结构简单,传输快速;如果是选择用来储存结构很复杂或者很重要的数据像配置文件这种就建议用XML。总的来说,对于我这种菜鸟来说,先使用JSON比较方便。
本文是我这小菜鸟的一些小小的学习经验,希望能帮助到大家,后续将会是JSON的解析方法介绍,谢谢关注。