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仍有不可動搖的地位。