XML与JSON的对比

1、各自定义

XML

扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

关于JSON的更多描述,可见:http://json.org

2.XML和JSON对比

XML

1)应用广泛,可扩展性强,被广泛应用各种场合
2)读取、解析没有JSON快
3)可读性强,可描述复杂结构

XML的应用已经深入人心,不再赘述。

JSON
1)结构简单,都是键值对。
2)读取、解析速度快,很多语言支持
3)传输数据量小,传输速率大大提高

4)描述复杂结构能力较弱

JavaScript、PHP等原生支持,简化了读取解析。成为当前互联网时代普遍应用的数据结构。

3、XML与JSON转换

常常会用到XML与JSON之间的转换,在这里可以更加清晰了解两者之间的区别。

1)常规转换

常规的节点转换,以下的案例能够直观的看到彼此之间的转换原理。

XML是节点名与值,JSON也是KEY与VALUE的键值对。这样的转换是最简单的。

XML:

<Student>张三</Student>

转为JSON:

{ "Student": "张三" }

这个过程是可逆的,JSON可以很简单转为XML。

2) XML节点含有属性

节点含有属性,其转换就不同了,在JSON中,XML属性也作为了JSON对象的属性,为了区别与其他的节点,这里节点名增加特殊的前缀标识"@"以标识是属性,

另外一个比较奇怪的是,节点的值,增加属性名,且有特殊前缀,“#text”。这样的处理可以使得XML与JSON的转换实现可逆操作。JSON中@开头的,转为XML时,需要生成节点属性,#text则为节点的内容。这里的转换是常用的转换器的通用做法。

以下的转换例子

XML:

<Student ID="1001">张三</Student>

转为JSON

{
"Student": {
"@ID": "1001",
"#text": "张三"
}
}

3)有属性的节点生成对象

例1,无属性节点,简单的字符串数组

<line>
<item>name</item>
<item>age</item>
</line>

转为JSON:

{
"line": {
"item": [
"name",
"age"
]
}
}

例2,有属性的转为对象,无属性的则直接转为字符串

有属性节点

<line>
<item font-size="20">name</item>
<item>age</item>
</line>

转为JSON:

{
"line": {
"item": [
{
"@font-size": "20",
"#text": "name"
},
"age"
]
}
}

4) XML的节点顺序性

XML存在着节点之间的顺序,但当转为JSON后,有时顺序会被打乱。

这一点,可以解释XML与JSON的一大不同,描述结构顺序性,特别是复杂结构时,JSON没有XML清晰简单。

以下的例子,我们可以清晰看到这一点,转换不可逆。

例子:

XML:

<template>
<block>天空</block>
<line>地平线</line>
<block>地下</block>
</template>

转变为JSON:

{
"template": {
"block": [
"天空",
"地下"
],
"line": "地平线"
}
}

在这里,我们可以看到在JSON中,将两个block放到了一起,中间的line则放到了后面,XML原有的节点顺序就此打乱。

如果想从此JSON转为原来的XML,已经不可能。

如果非要较真,当然可以在JSON中指定具体的属性,标识其顺序或者前后节点之间的关系,但是这样做,确实增加复杂度。

4、XML的属性与元素对比

属性无法包含多重的值(元素可以)
属性无法描述树结构(元素可以)
属性不易扩展(为未来的变化)
属性难以阅读和维护

如下的XML感觉很愚蠢:

<message time="2014-10-01 10:10:02" to="Lucy" from="Jim" body="Don't forget the meeting!"></message>

应该为:

<message>
<from>Jim</from>
<to>Lucy</to>
<time>2014-10-01 10:10:02</time>
<body>Don't forget the meeting!</body>
</message>

原则:

元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

5、建议选择原则

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

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

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

XML与JSON的对比的更多相关文章

  1. XML和JSON数据格式对比

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

  2. XML和JSON的对比

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

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

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

  4. 数据交换格式XML和JSON对比

    1.简介: XML:extensible markup language,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(document type definition)文档类型定义来组 ...

  5. [Network] HTML、XML和JSON学习汇总

    写在前面:楼主也是刚刚接触这方面的知识,之前完全是零基础,后来经朋友推荐了几个不错的博文,看完以后豁然开朗.但是此博文更加偏重于基础知识介绍(其实更深的楼主也还不了解,这方面的大神请绕道),只是分享个 ...

  6. xml和json的区别

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

  7. XML于JSON

    XML:可拓展的标记语言(跨平台数据表现)用于保存数据 XML:标记需要关闭 :单根性 .NET中DOM常用对象: XmlDocument :一个XML文档 XmlNode:xml中的单个节点 Xml ...

  8. 10分钟掌握XML、JSON及其解析

    引言 NOKIA 有句著名的广告语:“科技以人为本”.任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个人穷其一生也未必能掌 ...

  9. Android基础总结(12)——XML和JSON解析

    XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...

随机推荐

  1. 超级迷宫 nabc

    特点之一:益智模式 N  我们的游戏需要一点点益智答题使其精彩 A 在走迷宫的过程中,会遇到某一个点,出现一个益智小问题,答对即可通过 B 增加游戏的趣味性,吸引用户 C 答题游戏不少,前不久腾讯的手 ...

  2. android产品业务逻辑对app稳定影响太大

    产品经理们, 看看你们的交互文档, 有n个逻辑分支, 在我们的实现中至少存在2*n个逻辑分支 这样极度造成了app的不稳定性,表现就是 非必须的bug很多.还有就是维护性极差 当然你们会说,你们可以写 ...

  3. css文字两端对齐

    css文字两端对齐 text-align:Justify(火狐); text-justify:inter-ideograph(IE) text-justify(IE) 基本语法 text-justif ...

  4. 编译osg的一个错误

    C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets! 提示找不到CMAKELIST.T ...

  5. IOS中的动画菜单

    SvpplyTable(可折叠可张开的菜单动画) 允许你简单地创建可折叠可张开的菜单动画效果,灵感来自于Svpply app.不同表格项目使用JSON定义,你可以定义每个菜单项和任何子菜单,为每个项目 ...

  6. JavaWeb chapter 4 Servlet处理HTTP请求

    1.  GET/POST提交方法: 用户在网页上点击一个超链接:(get) 用户提交在网页上提交表单:(post或者get) 用户在浏览器地址栏输入URL地址并回车(get) 2.  默认情况下都是使 ...

  7. Selenium - CSS Selector

    Selenium - CSS Selector http://www.cnblogs.com/bugua/archive/2012/08/16/2641647.html   昨天我练习了用CSS(即层 ...

  8. TreeSet和Comparator 对TreeSet排序

    使用TreeSet和Comparator,编写TreeSetTestInner类,要求对TreeSet中的元素"HashSet"."ArrayList".&qu ...

  9. Yii2-redis

    安装:composer require --prefer-dist yiisoft/yii2-redisredis 版本 >= 2.6.12 添加配置: 'components' => [ ...

  10. 搭建mysql5.626及如何去官网下载历史版本数据库

    MySQL官网下载历史版本 网上搜索MySQL官网 2 查询所有的归档文件   点击进入服务器列表   列表中默认只有Windows 版本的,可选择其它版本,但无法进行查询   查看网页元素   发现 ...