XML VS JSON

目前,在web開發領域,主要的數據交換格式有XML和JSON,對於XML相信每一個web developer都不會感到陌生;相比之下,JSON可能對於一些新步入開發領域的新手會感到有些陌生,也可能你之前已經聽說過,但對於XML和 JSON的不同之處可能會不怎麼了解。對於在 Ajax開發中,是選擇XML還是JSON,一直存在着爭議,個人還是比較傾向於JSON的,雖然JSON才處於起步階段,但我相信JSON最終會取代XML成爲Ajax的首選,到時Ajax可能要更名爲Ajaj(Asynchronous JavaScript and JSON)了;

1.數據交換格式比較之關於XML和JSON:

XML:extensible markup language,一種類似於HTML的語言,他沒有預先定義的標籤,使用DTD(document type definition)文檔類型定義來組織數據;格式統一,跨平臺和語言,早已成爲業界公認的標準。具體的可以問Google或百度。相比之JSON這種輕量級的數據交換格式,XML可以稱爲重量級的了。

 

JSON : JavaScript Object Notation 是一種輕量級的數據交換格式。易於人閱讀和編寫。同時也易於機器解析和生成。它基於JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一個子集。 JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成爲理想的數據交換語言。

2.數據交換格式比較之關於輕量級和重量級:

輕量級和重量級是相對來說的,那麼XML相對於JSON的重量級體現在哪呢?我想應該體現在解析上,XML目前設計了兩種解析方式:DOM和SAX;

DOM是把一個數據交換格式XML看成一個DOM對象,需要把XML文件整個讀入內存,這一點上JSON和XML的原理是一樣的,但是XML要考慮父節點和子節點,這一點上JSON的解析難度要小很多,因爲JSON構建於兩種結構:key/value,鍵值對的集合;值的有序集合,可理解爲數組;

SAX不需要整個讀入文檔就可以對解析出的內容進行處理,是一種逐步解析的方法。程序也可以隨時終止解析。這樣,一個大的文檔就可以逐步的、一點一點的展現出來,所以SAX適合於大規模的解析。這一點,JSON目前是做不到得。

所以,JSON和XML的輕/重量級的區別在於:JSON只提供整體解析方案,而這種方法只在解析較少的數據時才能起到良好的效果;而XML提供了對大規模數據的逐步解析方案,這種方案很適合於對大量數據的處理。

3.數據交換格式比較之關於數據格式編碼及解析的難度:

在編碼上,雖然XML和JSON都有各自的編碼工具,但是JSON的編碼要比XML簡單,即使不借助工具,也可以寫出JSON代碼,但要寫出好的XML代碼就有點困難;與XML一樣,JSON也是基於文本的,且它們都使用Unicode編碼,且其與數據交換格式XML一樣具有可讀性。

主觀上來看,JSON更爲清晰且冗餘更少些。JSON網站提供了對JSON語法的嚴格描述,只是描述較簡短。從總體來看,XML比較適合於標記文檔,而JSON卻更適於進行數據交換處理。

在解析上,在普通的web應用領域,開發者經常爲XML的解析傷腦筋,無論是服務器端生成或處理XML,還是客戶端用 JavaScript 解析XML,都常常導致複雜的代碼,極低的開發效率。

實際上,對於大多數web應用來說,他們根本不需要複雜的XML來傳輸數據,XML宣稱的擴展性在此就很少具有優勢;許多Ajax應用甚至直接返回HTML片段來構建動態web頁面。和返回XML並解析它相比,返回HTML片段大大降低了系統的複雜性,但同時缺少了一定的靈活性。同XML或HTML片段相比,數據交換格式JSON 提供了更好的簡單性和靈活性。在web serivice應用中,至少就目前來說XML仍有不可動搖的地位。

 

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概念很簡單,就是服務器直接生成Javascript語句,客戶端獲取後直接用eval方法來獲得這個對象,這樣就可以省去解析XML的性損失。

例如:

使用XML表示:

<items> 
<item> 
<id>1</id> 
<author>asp</author> 
<url>http://www.aspxuexi.com</url> 
<content>Welcome to aspxuexi.com</content> 
</item> 
<item> 
<id>2</id> 
<author>Relkn</author> 
<url>http://www.aspxuexi.com</url> 
<content>aspxuexi.com 關注asp</content> 
</item> 
<item> 
<id>3</id> 
<author>kak</author> 
<url>http://www.aspxuexi.com</url> 
<content>www.aspxuexi.com asp教程</content> 
</item> 
</items> 

<items> 
<item> 
<id>1</id> 
<author>aspxuexi</author> 
<url>http://www.aspxuexi.com</url> 
<content>Welcome to aspxuexi.com</content> 
</item> 
<item> 
<id>2</id> 
<author>Relkn</author> 
<url>http://www.aspxuexi.com</url> 
<content>aspxuexi.com關注互聯網新技術</content> 
</item> 
<item> 
<id>3</id> 
<author>Kvogend</author> 
<url>http://www.aspxuexi.com</url> 
<content>aspxuexi.com關注WEB2.0</content> 
</item> 
</items>


使用JSON:

{items:[ 
{ 
id:1, 
author:\"aspxuexi\", 
url:\"http://www.aspxuexi.com\", 
content:\"Welcome to aspxuexi.com\" 
}, 
{ 
id:2, 
author:\"Relkn\", 
url:\"http://www.aspxuexi.com\", 
content:\"aspxuexi.com關注互聯網新技術\" 
}, 
{ 
id:3, 
author:\"Kvogend\", 
url:\"http://www.aspxuexi.com\", 
content:\"aspxuexi.com關注WEB2.0\" 
} 
]}; 

{items:[ 
{ 
id:1, 
author:\"aspxuexi\", 
url:\"http://www.aspxuexi.com\", 
content:\"Welcome to aspxuexi.com\" 
}, 
{ 
id:2, 
author:\"Relkn\", 
url:\"http://www.aspxuexi.com\", 
content:\"aspxuexi.com關注互聯網新技術\" 
}, 
{ 
id:3, 
author:\"Kvogend\", 
url:\"http://www.aspxuexi.com\", 
content:\"aspxuexi.com關注WEB2.0\" 
} 
]};


 

JSON不僅減少了解析XML解析帶來的性能問題和兼容性問題,而且對於Javascript來說非常容易使用,可以方便的通過遍歷數組以及訪問對象屬性來獲取數據,其可讀性也不錯,基本具備了結構化數據的性質。不得不說是一個很好的辦法,而且事實上google maps就沒有采用XML傳遞數據,而是採用了JSON方案。

JSON的另外一個優勢是"跨域性",例如你在www.aspxuexi.com的網頁裏使用
<script type="text/javascript" src="http://www.yyy.com/some.js">
是完全可行的,這就意味着你可以跨域傳遞信息。而使用XMLHttpRequest卻獲取不了跨域的信息,這是Javascript內部的安全性質所限制的。

JSON能完全取代XML嗎?當然不能,原因就在於XML的優勢:通用性。要使服務器端產生語法合格的Javascript代碼並不是很容易做到的,這主要發生在比較龐大的系統,服務器端和客戶端有不同的開發人員。它們必須協商對象的格式,這很容易造成錯誤。

Ajax:擁抱JSON,讓XML走開

  Ajax(Asynchronous Javascript and XML)說到底就是一種瀏覽器異步讀取服務器上XML內容的技術。現在的技術凡是跟XML扯上關係,再加上個概念做幌子,就像金裝了一樣,拽得不行。門外的人看得很是熱鬧,門裏的人搖搖頭不外如是。XML呢,跨平臺的新潮語言?其實XML=TXT。XML只是符合很多規範的文本。它本身什麼都不是,只是保存字符的文件。而瀏覽器異步讀取的只是服務器上的文本內容,所以在Ajax開發時完全不必拘泥於XML。

  JSON的來歷

  XML 的作用是格式化數據內容。如果我們不用XML還有什麼更好的方法嗎?這個答案是JSON。介紹JSON之前我先介紹一下Javascript這門腳本語言。腳本語言自身有動態執行的天賦。即我們可以把想要執行的語句放在字符串裏,通過eval_r()這個動態執行函數來執行。字符串裏的內容會像我們寫的腳本一樣被執行。

 

JSON的格式

  JSON的基本格式如下,

  ·對象是屬性、值對的集合。一個對象的開始於"{",結束於"}"。每一個屬性名和值間用":"提示,屬性間用","分隔。
  ·數組是有順序的值的集合。一個數組開始於"[",結束於"]",值之間用","分隔。
  ·值可以是引號裏的字符串、數字、true、false、null,也可以是對象或數組。這些結構都能嵌套。
  ·字符串的定義和C或Java基本一致。
  ·數字的定義也和C或Java基本一致。

JSON VS XML

  ·可讀性  JSON和XML的可讀性可謂不相上下,一邊是建議的語法,一邊是規範的標籤形式,很難分出勝負。
  ·可擴展性  XML天生有很好的擴展性,JSON當然也有,沒有什麼是XML能擴展,JSON不能的。
  ·編碼難度  XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的編碼明顯比XML容易許多,即使不借助工具也能寫出JSON的代碼,可是要寫好XML就不太容易了。
  ·解碼難度  XML的解析得考慮子節點父節點,讓人頭昏眼花,而JSON的解析難度幾乎爲0。這一點XML輸的真是沒話說。
  ·流行度  XML已經被業界廣泛的使用,而JSON纔剛剛開始,但是在Ajax這個特定的領域,未來的發展一定是XML讓位於JSON。到時Ajax應該變成Ajaj(Asynchronous Javascript and JSON)了。

 

相對XML,JSON的解析速度提高了30%,佔用空間少30%。這些結果似乎和多數開發社區對兩種格式的看法一樣。換用JSON處理數據在性能上可以有不小的提升,而且還會減少空間的佔用。

 

發佈了44 篇原創文章 · 獲贊 115 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章