原創文章,如需轉載,請註明出處。
當我們在定義AJAX服務的時候,對於各種各樣的請求,應該以什麼樣的資料格式來響應哪?
當然如果是請求一段Markup代碼的話,HTML就是最合適的,用戶端請求到資料後,就可以直接插入到前端頁面中了。那如果用戶端需要的是純粹的資料的話,我們是應該提供XML哪,還是JSON?這兩者各有什麼優缺點和好處哪,瞭解了這兩者的差異後我們就可以基於實際情況進行權衡取捨了。
我們從以下幾個方面來進行比較:
1、用戶端
在用戶端通過向伺服器發送XMLHttpRequest,就可以得到請求資料了,哪什麼樣的資料格式更容易處理哪?
JSON樣本:{
"author" : "Gambardella, Matthew",
"title" : "XML Developer's Guide",
"genre" : "Computer"
}
對於JSON資料,只需要調用JavaScript的Eval方法就可以將JSON字串序列化成為JavaScript對象,而後就可以直接存取了。如下所示:
var book = eval(request.responseText);
alert(book.author);
XML樣本:<book>
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
</book>
對於XML資料,其本身是一個DOM Tree的資料結構,開發人員必須使用DOM API來訪問和處理XML資料;而且DOM在各個瀏覽器中的實現也不盡相同,所以針對XML DOM的編程方式會變的更為複雜。參見下面的實現方式:
var book = request.responseXML;
var authors = book.getElementsByTagName("author");
alert(authors[0].firstChild.textContent);
另外對於XMLDOM,瀏覽器目前還不支援類似於XPath這樣的查詢語句。顯然對於XMLDOM資料的訪問顯然要比訪問JSON複雜多了。
2、伺服器端
在伺服器端需要向用戶端發送資料,什麼樣的資料格式處理起來更容易哪?
顯然對於如何序列化或者犯序列化一個對象成為XML字串,各種服務端的程式設計語言都有提供,而且還會有多種方式。例如.NET Framework就提供了XmlSerializer類來序列化一個對象成為Xml文檔,另外開發人員還可以使用XmlWriter、XMLDocument來直接構建Xml字串。
而對於JSON這樣一種資料格式則鮮有提供,這就需要開發人員自己動手或者使用一些Open Source的Library。在複雜物件的序列化或者還原序列化上,由於Xml做的比較早應該會更穩定一些。
在這點上XML會優於JSON.
3、安全性
JSON 本來是JavaScript 的一個安全的子集,不會含有賦值和調用。因此在將JSON資料裝換成為JavaScript對象的時候,我們包括許多JavaScript 庫都使用 Eval
函數。這意味著擷取的JSON資料將被解析並執行,注意是執行,尤其有一些資料是來自使用者輸入的話,可能會帶來意想不到的安全性問題。攻擊者也可以利用這點發送畸形、惡意的 JSON資料,這樣Eval
函數就會執行這些惡意代碼。
從這一點上來說也要求我們如果在使用JSON作為資料交換格式的時候,必須保障JSON安全。比較常見的辦法是使用Regex來檢查JSON資料是否包含有惡意代碼關鍵字。
而XML則相對來講更安全一些。
4、效能
從資料轉送量上來看JSON顯然要優於XML,JSON更輕量級一些,它沒有像XML那樣多的Open和Closing標記。同時在對資料的解析速度上,JSON也要優於XML。
5. 其他
另外從資料格式的驗證角度來看的話,XML的驗證技術更成熟,而目前關於JSON的驗證還比較少。