目前,在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)了。