安卓客戶端開發:XML和JSON兩種資料交換格式的比較
最近想給網站做客戶端,因此在考慮到底是用xml還是Json的問題,剛好在網上讀到了這篇文章。
目前,在web開發領域,主要的資料交換格式有XML和JSON,對於XML相信每一個web developer都不會感到陌生;相比之下,JSON可能對於一些新步入開發領域的新手會感到有些陌生,也可能你之前已經聽說過,但對於XML和 JSON的不同之處可能會不怎麼了解。對於在 Ajax開發中,是選擇XML還是JSON,一直存在著爭議,個人還是比較傾向於JSON的,雖然JSON才處於起步階段,但我相信JSON最終會取代 XML成為Ajax的首選。
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仍有不可動搖的地位。