XML和JSON比較

來源:互聯網
上載者:User

標籤:

  目前,在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:‘[email protected]‘}";  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>[email protected]</email>   <homepage>http://www.jialing.net</homepage>  </friend>  <friend>   <name>John</name>   <email>[email protected]</email>   <homepage>http://www.aspxuexi.com</homepage>  </friend>  <friend>   <name>Peggy</name>   <email>[email protected]</email>   <homepage>http://www.peggy.com</homepage>  </friend> </contact>   而寫成JSON呢: [ {  name:"Michael",  email:"[email protected]",  homepage:http://www.aspxuexi.com }, {  name:"John",  email:"[email protected]",  homepage:"http://www.jobn.com" }, {  name:"Peggy",  email:"[email protected]",  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)了。

XML和JSON比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.