XML与JSON的比较

来源:互联网 发布:mg动画用什么软件 编辑:程序博客网 时间:2024/05/22 05:01

简介

XML(eXtensible Markup Language,可扩展标记语言),是一种标记语言。XML是从SGML(The Standard Generalized Markup Language,标准通用标记语言)中简化修改出来的。XML被设计用来传输和存储数据。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它是基于JavaScript Programming Language, Standard ECMA-262 3rd Edition的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

XML与JSON的对比

两者都是文本表示的数据格式,可以跨平台、跨系统交换数据。XML适合标记文档,但是JSON是数据交互的理想格式
两者最大的不同在于,XML是一个完整的标记语言,而JSON不是。XML利用标记语言的特性提供了绝佳的延展性(如XPath),在数据存储,扩展及高级检索方面优势明显,而JSON则由于比XML更加小巧,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。
就可读性而言,两者都具备很好的可读性,但XML文档的可读性更高
就数据表示和传输性能而言,JSON明显比XML简洁,格式简单,占用带宽少

示例

示例1

用XML格式表示中国部分省市数据:
<?xml version="1.0" encoding="utf-8" ?><country>  <name>中国</name>  <province>    <name>黑龙江</name>    <citys>      <city>哈尔滨</city>      <city>大庆</city>    </citys>      </province>  <province>    <name>广东</name>    <citys>      <city>广州</city>      <city>深圳</city>      <city>珠海</city>    </citys>     </province></country>
用JSON格式表示中国部分省市数据:
var country ={    name: "中国",    provinces: [        { name: "黑龙江", citys: { city: ["哈尔滨", "大庆"]} },        { name: "广东", citys: { city: ["广州", "深圳", "珠海"]} }    ]}

示例2

用XML格式表示地址簿:
<?xml version='1.0' encoding='UTF-8'?><card>    <fullname>Sean Kelly</fullname>    <org>SK Consulting</org>    <emailaddrs>        <address type='work'>kelly@seankelly.biz</address>        <address type='home' pref='1'>kelly@seankelly.tv</address>    </emailaddrs>    <telephones>        <tel type='work' pref='1'>+1 214 555 1212</tel>        <tel type='fax'>+1 214 555 1213</tel>        <tel type='mobile'>+1 214 555 1214</tel>    </telephones>    <addresses>        <address type='work' format='us'>1234 Main StnSpringfield, TX 78080-1216</address>        <address type='home' format='us'>5678 Main StnSpringfield, TX 78080-1316</address>    </addresses>    <urls>       <address type='work'>http://seankelly.biz/</address>       <address type='home'>http://seankelly.tv/</address>    </urls></card>
用JSON格式表示地址簿:
var card ={   "fullname": "Sean Kelly",   "org": "SK Consulting",   "emailaddrs": [      {"type": "work", "value": "kelly@seankelly.biz"},      {"type": "home", "pref": 1, "value": "kelly@seankelly.tv"}   ],    "telephones": [      {"type": "work", "pref": 1, "value": "+1 214 555 1212"},      {"type": "fax", "value": "+1 214 555 1213"},      {"type": "mobile", "value": "+1 214 555 1214"}   ],   "addresses": [      {"type": "work", "format": "us",       "value": "1234 Main StnSpringfield, TX 78080-1216"},      {"type": "home", "format": "us",       "value": "5678 Main StnSpringfield, TX 78080-1316"}   ],    "urls": [      {"type": "work", "value": "http://seankelly.biz/"},      {"type": "home", "value": "http://seankelly.tv/"}   ]}


主要参考博客:
http://www.cnblogs.com/SanMaoSpace/p/3139186.html
http://www.cnblogs.com/lostyue/archive/2012/04/27/2472956.html

附录:

XML、XSL、XSD的区别:
XML
(eXtensible Markup Language,可扩展标记语言)
XSL(eXtensible Stylesheet Language,扩展样式表语言),XSL之于XML,就像CSS之于HTML。用于以可读格式呈现XML数据。
XSL包括三部分:
XSLT
一种用于转换XML文档的语言。
XPath
一种用于在XML文档中导航的语言。
XSL-FO
一种用于格式化XML文档的语言。
XSD(XML Schemas Definition,XML结构定义),通过XSD校验XML。

Java解析XML的方法:
基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。
DOM解析 - 
优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;
缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

SAX解析 - 
优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。
缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;

Java解析XML的4种经典方法:
1. DOM生成和解析XML(w3c-dom.jar)
2. SAX生成和解析XML(sax2.jar,2004年后已停止更新)
3. DOM4J生成和解析XML(dom4j.jar,支持DOM方式和SAX方式解析 - DOMReader、SAXReader)
4. JDOM生成和解析XML(jdom.jar)

dom4j处理带命名空间的XML - 使用XPath

Java构造和解析Json数据的两种方法:org.json和json-lib

json-lib和org.json的使用几乎是相同的,区别有两点:
(1) org.json比json-lib要轻量得多,前者没有依赖任何其他jar包,而后者要依赖ezmorph和commons的lang、logging、beanutils、collections等组件
(2) json-lib在构造bean和解析bean时比org.json要方便的多,json-lib可直接与bean互相转换,而org.json不能直接与bean相互转换而需要map作为中转,若将bean转为json数据,首先需要先将bean转换为map再将map转为json,比较麻烦。

在线JSON校验格式化工具 http://www.bejson.com/

JSONPath/XPath语法


java.lang.NoClassDefFoundError: org/jaxen/JaxenException解决方法

在使用dom4j的xpath时出现java.lang.NoClassDefFoundError: org/jaxen/JaxenException的异常,原因是dom4j引用了jaxen jar包,而在项目中没有引用此jar包,引用此jar包即可解决问题,如果你用了maven,在pom.xml中添加如下配置就可以了:

<dependency><groupId>jaxen</groupId><artifactId>jaxen</artifactId><version>1.1.4</version><exclusions><exclusion> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId></exclusion></exclusions></dependency><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency>
jaxen是一个用Java开发的XPath 引擎,支持JDOM, dom4j 等,其项目位置: http://jaxen.org/。

0 0
原创粉丝点击