信息化到處被提及的特點,就是擁有大量的數據交互的格式。前陣子學習了XML的結構化數據,在學習javascript的時候又接觸到了JSON,都作為數據的存儲格式,二者之間有什么區別和聯系呢,查了很多的資料,小編在這里就相當于寫個總結了。
十年前,XML是主要的數據交換格式。它的出現,尤如一股清新的空氣,以及令人驚喜的SGML(標準通用標記語言),是一個巨大的進步。它使人們能夠做到以前想都不敢想的事情,本質上講,XML就是一個文本文件,在解析上,在普通的web應用領域,開發者經常為XML的解析傷腦筋,無論是服務器端生成或處理XML,還是客戶端解析XML,都常常導致復雜的代碼,極低的開發效率,無疑讓JSON占了上風,加上在javascript的領域中,利用toJSONString()就可以看到JSON的字符串結構。
## 一、JSON是什么
JSON : JavaScript Object Notation 是一種輕量級的數據交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。
關于XML的詳細介紹(見博客:[B/S初探之XML學習小結](http://blog.csdn.net/zhou2s_101216/article/details/42215059))。
## 二、JSON的優缺點
優點:
(1)數據格式比較簡單,易于讀寫,格式都是壓縮的,占用帶寬小;
(2)易于解析,客戶端JavaScript可以簡單的通過eval_r()進行JSON數據的讀取;
(3)支持多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服務器端語言,便于服務器端的解析;
(4)在PHP世界,已經有PHP-JSON和JSON-PHP出現了,偏于PHP序列化后的程序直接調用,PHP服務器端的對象、數組等能直接生成JSON格式,便于客戶端的訪問提取;
(5)因為JSON格式能直接為服務器端代碼使用,大大簡化了服務器端和客戶端的代碼開發量,且完成任務不變,并且易于維護。
缺點:
(1)沒有XML格式這么推廣的深入人心和喜用廣泛,沒有XML那么通用性;
(2)JSON格式目前在Web Service中推廣還屬于初級階段
## 三、XML的優缺點
優點:
(1)格式統一,符合標準;
(2)容易與其他系統進行遠程交互,數據傳輸比較方便。
缺點:
(1)XML文件龐大,文件格式復雜,傳輸占帶寬;
(2)服務器端和客戶端都需要花費大量代碼來解析XML,導致服務器端和客戶端代碼變得異常復雜且不易維護;
(3)客戶端不同瀏覽器之間解析XML的方式不一致,需要重復編寫很多代碼;
(4)服務器端和客戶端解析XML花費較多的資源和時間。
## 四、二者比較
1、可讀性
JSON和XML的可讀性可謂不相上下,一邊是簡易的語法(JSON),一邊是規范的標簽形式(XML),很難分出勝負。
2、可擴展性
XML天生有很好的擴展性,JSON當然也有,沒有什么是XML可以擴展而JSON卻不能擴展的。不過JSON在Javascript主場作戰,可以存儲Javascript復合對象,有著xml不可比擬的優勢。
3、編碼難度
XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有提供的工具。無工具的情況下,相信熟練的開發人員一樣能很快的寫出想要的xml文檔和JSON字符串,不過,xml文檔要多很多結構上的字符。
4、解碼難度
XML的解析方式有兩種:一是通過文檔模型解析,也就是通過父標簽索引出一組標記。例如:xmlData.getElementsByTagName("tagName"),但是這樣是要在預先知道文檔結構的情況下使用,無法進行通用的封裝。另外一種方法是遍歷節點(document 以及 childNodes)。這個可以通過遞歸來實現,不過解析出來的數據仍舊是形式各異,往往也不能滿足預先的要求。凡是這樣可擴展的結構數據解析起來一定都很困難。JSON也同樣如此。
5、有效數據率
JSON作為數據包格式傳輸的時候具有更高的效率,這是因為JSON不像XML那樣需要有嚴格的閉合標簽,這就讓有效數據量與總數據包比大大提升,從而減少同等數據流量的情況下,網絡的傳輸壓力。
以上都是我查到的,不怕腦洞不夠大,一張導圖總結以上的內容:

## 五、舉例
XML:
~~~
<?xml version="1.0" encoding="utf-8"?>
<country><name>中國</name>
<province><name>黑龍江</name><cities><city>哈爾濱</city><city>大慶</city></cities></province>
<province><name>廣東</name><cities><city>廣州</city><city>深圳</city><city>珠海</city></cities></province>
<province><name>臺灣</name><cities><city>臺北</city><city>高雄</city></cities></province>
<province><name>新疆</name><cities><city>烏魯木齊</city></cities></province>
~~~
JSON:
~~~
<span style="font-family:KaiTi_GB2312;font-size:18px;"> { "people":
[ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
]}</span>
~~~
## 六、總結
個人認為JSON更好,因為它不像XML那么詳盡,并且比起純二進制更容易被人們理解。XML已經被業界廣泛的使用,而JSON才剛剛開始,但是在Ajax這個特定的領域,為了實現友好的異步數據傳輸,JSON還是很有潛力的。