简介
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","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"},"value": "5678 Main StnSpringfield,TX 78080-1316"} ],"urls": [ {"type": "work","value": "http://seankelly.biz/"},"value": "http://seankelly.tv/"} ] }
主要参考博客:
http://www.cnblogs.com/SanMaoSpace/p/3139186.html
http://www.cnblogs.com/lostyue/archive/2012/04/27/2472956.html