XML 和 JSON 数据格式对比

一、定义
1.1 什么是 XML?
  • XML 指可扩展标记语言(Extensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义,您需要自行定义标签
  • XML 被设计为具有自我描述性
  • XML 是 W3C 的推荐标准
1.2 什么是 JSON?
  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  • JSON 是轻量级的文本数据交换格式
  • JSON 独立于编程语言,采用完全独立于编程语言的文本格式来存储和表示数据。JSON 解析器和 JSON 库支持许多不同的编程语言。
  • JSON 具有自我描述性,更易理解
二、文件构成
2.1 XML 文档的构建模块

  所有的 XML 文档均由以下简单的构建模块构成:元素、属性、实体、PCDATA、CDATA。分别对其说明如下。

  • 元素
    元素是 XML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。示例:
<body>body text</body>
  • 属性
    属性可提供有关元素的额外信息。示例:
<img src="computer.gif" />
  • 实体
    实体是用来定义普通文本的变量。

  • PCDATA
    PCDATA 的意思是被解析的字符数据(parsed character data)。
    PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
    在 DTD 中,指定某个标签中的内容是字符数据时,使用 (#PCDATA)。由于它的内容也是需要解析器来解析的,所以仍然需要转换 >, <, &, ‘, " 这 5 个特殊字符。 例如在 DTD 中声明: <!ELEMENT name (#PCDATA)>, 它表示在 <name> 和 </name> 标签之间可以插入字符或者子标签。PCDATA 可以是字符串和子元素。

  • CDATA
    CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
    某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。CDATA 是在 XML 文档里面使用的关键字,用来告诉浏览器,这部分内容不用解析,是给其他程序用的,比如 js 代码等。
    CDATA 部分中的所有内容都会被解析器忽略。
    CDATA 部分由 “<![CDATA[" 开始,由 "]]>” 结束,示例如下:

<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
  {
  return 1;
  }
else
  {
  return 0;
  }
}
]]>
</script>

  在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。
  注释:CDATA 部分不能包含字符串 “]]>”,也不允许嵌套的 CDATA 部分,标记 CDATA 部分结尾的 “]]>” 不能包含空格或折行。

2.2 JSON 构成

  json 由对象(集合)、数组、key/value 元素三部分组成,可以相互嵌套。各部分表示方法如下所示:

  • 使用大括号包围的是对象
  • 使用中括号包围的是数组
  • 冒号分隔的是元素。

  元素组成:

  • 元素的 key 只能是字符串。
  • 元素的 value 数据类型可以是数字(整数或浮点数)、字符串、逻辑值(true 或 false)、数组、对象、null。
三、语法规则
3.1 XML 语法规则

   XML 的语法规则很简单,且很有逻辑。这些规则很容易学习,也很容易使用,具体说明如下。

  • 所有 XML 元素都须有关闭标签。
    注释:您也许已经注意到 XML 声明没有关闭标签。这不是错误。声明不属于 XML 本身的组成部分。它不是 XML 元素,也不需要关闭标签。
  • XML 标签对大小写敏感。
    注释:打开标签和关闭标签通常被称为开始标签和结束标签。不论您喜欢哪种术语,它们的概念都是相同的。
  • XML 必须正确地嵌套。
  • XML 文档必须有根元素。
  • XML 的属性值须加引号。
  • 实体引用。
    在 XML 中,一些字符拥有特殊的意义。如果你把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。为了避免这个错误,请用实体引用来代替 “<” 字符。
    在 XML 中,有 5 个预定义的实体引用:
    在这里插入图片描述
    注释:在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
  • XML 中的注释。
    在 XML 中编写注释的语法与 HTML 的语法很相似,举例如下:
<!-- This is a comment -->
  • 在 XML 中,空格会被保留。
  • XML 以 LF 存储换行。
    “LF” 换行即使用 ‘\n’ 符号表示;还有一种换行 “CR” 换行,即用符号 “\r” 表示,别的语言用 “CR” 换行。
3.2 JSON 语法规则

  JSON 语法是 JavaScript 对象表示法语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

  JSON 值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null
四、XML 和 JSON 的区别

  XML 的优点:

  • 格式统一,符合标准;
  • 容易与其他系统进行远程交互,数据共享比较方便。

  XML 的缺点:

  • XML 文件庞大,文件格式复杂,传输占带宽;
  • 服务器端和客户端都需要花费大量代码来解析 XML,导致服务器端和客户端代码变得异常复杂且不易维护;
  • 客户端不同浏览器之间解析 XML 的方式不一致,需要重复编写很多代码;
  • 服务器端和客户端解析 XML 花费较多的资源和时间。

  JSON 的优点:

  • 数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
  • 易于解析,客户端 JavaScript 可以简单的通过 eval() 进行 JSON 数据的读取;
  • 支持多种语言,包括 ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby 等服务器端语言,便于服务器端的解析;
  • 在 PHP 世界,已经有 PHP-JSON 和 JSON-PHP 出现了,偏于 PHP 序列化后的程序直接调用,PHP 服务器端的对象、数组等能直接生成 JSON 格式,便于客户端的访问提取;
  • 因为 JSON 格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。

  JSON 的缺点:

  • 没有 XML 格式这么推广的深入人心和使用广泛,没有 XML 那么通用性;
  • JSON 格式目前在 Web Service 中推广还属于初级阶段。
五、XML 和 JSON 格式互转

  https://www.bejson.com/xml2json/ 网址可以快速将 XML 和 JSON 进行互转。举例如下。

  XML 数据:

<?xml version="1.0" encoding="UTF-8" ?>
	<Transfer>
		<attribute>Connect</attribute>
		<ext>
			<id>20013</id>
		</ext>
		<outer>
			<to>15505510628</to>
		</outer>
	</Transfer>

  JSON 数据:

{
  "Transfer": {
    "attribute": "Connect",
    "ext": { "id": "20013" },
    "outer": { "to": "15505510628" }
  }
}

  在线转换结果如下图所示。
在这里插入图片描述

文章参考:
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值