XML与JSON的比较

简介

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值