XML和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()這個動態執行函數來執行。字符串裏的內容會像咱們寫的腳本 同樣被執行。 
 
  示例1: 
<HTML> 
<HEAD> 
 <TITLE>eval example 1</TITLE> 
</HEAD> 
<BODY> 
 <script> 
  str = "alert('hello')"; 
  eval_r(str); 
 </script> 
</BODY> 
</HTML>
 
  打開頁面會彈出hello窗口。 
 
  咱們能夠在字符串中聽任何腳本語句,包括聲明語句: 
<HTML> 
<HEAD> 
<TITLE>eval example 2</TITLE> 
</HEAD> 
<BODY> 
<script> 
 define = "{name:'Michael',email:'1332@gmail.com'}"; 
 eval_r("data = "+define); 
 alert("name:"+data.name); 
 alert("email:"+data.email); 
</script> 
</BODY> 
</HTML>
 
  若是咱們在後臺異步傳來的文本是Javascript的聲明語句,那麼不是一條eval方法就能解析了?對於解析複雜的XML,這樣的效率是多麼大的提升啊! 
 
  如今就來告訴你什麼是JSON:Javascript Object Notation。我更願意把它翻譯爲Javascript對象聲明。好比要從後臺載入一些通信錄的信息,若是寫成XML,以下: 
<contact> 
 <friend> 
  <name>Michael</name> 
  <email>17bity@gmail.com</email> 
  <homepage>http://www.jialing.net</homepage> 
 </friend> 
 <friend> 
  <name>John</name> 
  <email>john@gmail.com</email> 
  <homepage>http://www.aspxuexi.com</homepage> 
 </friend> 
 <friend> 
  <name>Peggy</name> 
  <email>peggy@gmail.com</email> 
  <homepage>http://www.peggy.com</homepage> 
 </friend> 
</contact>
 
  而寫成JSON呢: 
 name:"Michael", 
 email:"17bity@gmail.com", 
 homepage:http://www.aspxuexi.com 
}, 
 name:"John", 
 email:"john@gmail.com", 
 homepage:"http://www.jobn.com" 
}, 
 name:"Peggy", 
 email:"peggy@gmail.com", 
 homepage:"http://www.peggy.com" 
]
 
  簡單的不僅是表達上,最重要的是能夠丟棄讓人暈頭轉向的DOM解析了。由於只要符合Javascript的聲明規範,JavaScrip會自動幫你解析好 的。Ajax中使用JSON的基本方法是前臺載入後臺聲明Javascript對象的字符串,用eval方法來將它轉爲實際的對象,最後經過 DHTML更新頁面信息。 
 
  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)了。
相關文章
相關標籤/搜索