概念

XML

扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。

XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

http://www.cnblogs.com/SanMaoSpace/p/3139186.html

XML规范:

https://www.w3.org/TR/REC-xml/

例子.

XML数据格式样例:

<employees>
<employee>
<firstName>Bill</firstName>
<lastName>Gates</lastName>
</employee>
<employee>
<firstName>George</firstName>
<lastName>Bush</lastName>
</employee>
<employee>
<firstName>Thomas</firstName>
<lastName>Thomas</lastName>
</employee>
</employees>

JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。

http://www.cnblogs.com/worfdream/articles/1956449.html

JSON规范:

http://json.org/

例子.

JSON数据格式样例:

{
"employees": [
{
"firstName": "Bill",
"lastName": "Gates"
},
{
"firstName": "George",
"lastName": "Bush"
},
{
"firstName": "Thomas",
"lastName": "Carter"
}
]
}

对比

效率实验对比

以概念章节中JSON的例子数据为研究对象, 构造同等的XML数据:

以这两个数据考察,它们分别在相同浏览器中的解析时间,和 查询时间:

在firefox浏览器中:

1、  解析1000次;

2、  查询第二个员工lastName,10000次。

针对两个数据分别构造页面脚本,分别跑5次,实验结果如下:

XML

项目   次数

1

2

3

4

5

平均

解析

1646

1656

1608

1650

1661

1644.2

查找

10

10

10

11

11

10.4

单位(ms)

JSON

项目   次数

1

2

3

4

5

平均

解析

4

4

3

3

3

3.4

查找

1

1

1

1

0

0.8

单位(ms)

总结,JSON的效率远远高于xml,解析效率是xml484倍,查找效率是13倍。

数据量对比

调查对于同一份数据信息,使用XML描述和JSON描述数据量差别对比。

以效率实验中的数据为对象,统计结果:XML是JSON的1.71倍。

XML: 263Byte

JSON: 154Byte

JSON对于相同信息的描述,比XML更加省数据量,比XML省42%,传输更快。

特性对比

XML

JSON

可读性

可扩展性

编写容易度

查找容易度

流行度

数据描述能力

安全性

说明:

1、  关于流行度,XML已经被业界广泛的使用,而JSON才刚刚开始,但是Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)

2、 关于安全性,由于大部分Javascript库都是使用eval()来解析数据,存在执行恶意JSON数据的安全漏洞;当然可以使用专门的JSON解析器来避免这个问题。相比,XML更安全一些。

参考:

https://blog.tanteng.me/2012/09/json-xml-compare/

http://www.cnblogs.com/SanMaoSpace/p/3139186.html

综上所述,XML由于其诞生时间早,相对成熟,在流行度、数据描述能力、安全性相对较高,其它特性JSON较高或者相同。其中编写和查询容易度,关系到开发体验,能提高开发效率,JSON优于XML

效率实验

json

<!doctype html>
<html>
<head>
</head>
<body> <script type="text/javascript">
function hereDoc(f){
return f.toString().replace(/^[^\/]+\/\*!?\s?/, '').replace(/\*\/[^\/]+$/, '');
} var jsonstring = hereDoc(function(){/*
{
"employees": [
{
"firstName": "Bill",
"lastName": "Gates"
},
{
"firstName": "George",
"lastName": "Bush"
},
{
"firstName": "Thomas",
"lastName": "Carter"
}
]
}
*/}); // 统计解析耗时
var starttime = (new Date()).getTime();
for (var i = 0; i < 1000; i++) {
JSON.parse(jsonstring);
};
var endtime = (new Date()).getTime();
console.log("parsing consume time ="+(endtime - starttime)) // 查询第二个成员lastName
var starttime = (new Date()).getTime();
var jsonObj = JSON.parse(jsonstring);
//console.log("lastName = "+lastName)
for (var i = 0; i < 10000; i++) {
var lastName = jsonObj.employees[1].lastName
};
var endtime = (new Date()).getTime();
console.log("finding consume time ="+(endtime - starttime)) </script> </body>
</html>

xml

<!doctype html>
<html>
<head>
</head>
<body> <script type="text/javascript">
function hereDoc(f){
return f.toString().replace(/^[^\/]+\/\*!?\s?/, '').replace(/\*\/[^\/]+$/, '');
} function GetXMLParseFunc() {
if (window.DOMParser)
{
var parser=new DOMParser();
return function (xmlstring) {
return parser.parseFromString(xmlstring,"text/xml");
}
}
else // Internet Explorer
{
console.log("not support DOMParser");
// xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
// xmlDoc.async="false";
// xmlDoc.loadXML(txt);
}
} var xmlstring = hereDoc(function(){/*
<employees>
<employee>
<firstName>Bill</firstName>
<lastName>Gates</lastName>
</employee>
<employee>
<firstName>George</firstName>
<lastName>Bush</lastName>
</employee>
<employee>
<firstName>Thomas</firstName>
<lastName>Thomas</lastName>
</employee>
</employees>
*/}); var parseFunc = GetXMLParseFunc(); // 统计解析耗时
var starttime = (new Date()).getTime();
for (var i = 0; i < 1000; i++) {
parseFunc(xmlstring);
};
var endtime = (new Date()).getTime();
console.log("parsing consume time ="+(endtime - starttime)) // 查询第二个成员lastName
var starttime = (new Date()).getTime();
var xmlObj = parseFunc(xmlstring);
for (var i = 0; i < 10000; i++) {
var lastName = xmlObj.getElementsByTagName("employee")[1].getElementsByTagName("lastName")[0].childNodes[0].nodeValue
//console.log("lastName = "+lastName)
};
var endtime = (new Date()).getTime();
console.log("finding consume time ="+(endtime - starttime)) </script> </body>
</html>

XML和JSON数据格式对比的更多相关文章

  1. XML与JSON的对比

    XML与JSON的对比 1.各自定义 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类 ...

  2. xml 和json 数据格式及解析

    来源:http://blog.jobbole.com/79252/ 引言 NOKIA 有句著名的广告语:“科技以人为本”.任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的 ...

  3. XML和JSON数据格式

    目录 XML DTD(文档类型定义) DTD实体 JSON 使用python解析JSON数据 XML和JSON的区别 XML的优缺点 JSON的优缺点 XML和JSON都是web存储和传输过程中数据的 ...

  4. XML和JSON的对比

    简介: 客户端和服务器之间进行数据交互时,服务器往往会返回给客户端一定格式的数据.一般而言,服务器返回给客户端的数据为JSON或者XML文档格式的数据(文件下载除外).下面就针对于这两种数据格式分别介 ...

  5. xml和json的区别

    本文转自SanMaoSpace的博客 链接地址如下:http://www.cnblogs.com/SanMaoSpace/p/3139186.html 1.定义介绍 (1).XML定义扩展标记语言 ( ...

  6. 全面剖析XML和JSON

    1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许 ...

  7. 用xml还是json

    1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允 ...

  8. [Android]XML和JSON的区别

    1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允 ...

  9. 浅析XML和JSON的区别

    前言 今天做接口对接时,发现对方竟然是通过XML进行数据传输,当时冒出的第一个想法就是:WTF,这都什么年代了,还在用XML,是来搞笑的吧,JSON它不香吗? 想法归想法,但对接还是要完成的是吧?然后 ...

随机推荐

  1. ppt - 常规策划

    1 比较图2 progress3 目标 proposal4 market leadership5 分析 - 设计 - 开发 - 实施 - 评估6 innovation7 时间区间表述8 阶梯式9 主 ...

  2. [译]:Orchard入门——给网站添加页面

    原文链接:Adding Pages to Your Site 注:内容为官方文档翻译,本人遇到的page中间是布局,而非官网的body--但此内容可以在内容定义里自行修改(本文不做介绍) 在创建Orc ...

  3. hdu分类 Dynamic Programming(这是一场漫长的旅途)

    下面是difficulty 1的题 1003   Max Sum 最长递增子序列.非常经典,最棒的解法是在线算法O(n)的复杂度. 贴的呢,是用dp做的代码. 先是一个高亮的dp递推式,然后找到最大处 ...

  4. 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)

    上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性. 安全性设置 设置客户端操作秘密 redis安装 ...

  5. 【Oracle】oracle中rownum的说明及使用技巧

    oracle中常用到ROWNUM,所以做一些本人对rownum的一些认识和使用技巧的记录,以便备查. 一.rownum的说明 rownum是oracle特有的一个关键字. (1)对于基表,在inser ...

  6. Shader实例:一台旧电视

    准备: 1.一段小视频 2.一张电视机贴图 3.一张过滤图 效果: 让视频内容只在电视机屏幕区域显示 Shader代码:有注释 Shader "Joe/old_tv" { Prop ...

  7. C#_Express-ickd接口

    爱查快递接口使用 using System; using System.Collections.Generic; using System.IO; using System.Net; using Sy ...

  8. ZeroMQ接口函数之 :zmq_proxy_steerable – 以STOP/RESUME/TERMINATE控制方式开启内置的ZMQ代理

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...

  9. ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...

  10. google jquery用不了啦,你准备好了吗

    今天,相信很多网站开发人员都有这感觉,明明正常的页面却无法工作了,莫名其妙的错误,笔者也遇到这种错误,细查之下才发现google jquery用不了啦,通过firefox调试发现找不到jquery了, ...