一,、兩者的共同優(yōu)點(diǎn)是都是文本表示的數(shù)據(jù)格式,,可以跨平臺,、跨系統(tǒng)交換數(shù)據(jù)
1,、可讀性 兩者都具備很好的可讀性,,但從實(shí)際應(yīng)用出發(fā),,個人還是覺得XML文檔的可讀性無疑會更高,,要求你從一大堆的json代碼里看出它的結(jié)構(gòu)層次關(guān)系還是相對比較困難的;而且現(xiàn)在很多的IDE工具都可以把XML格式化成易讀的結(jié)構(gòu)形式,,看起來相當(dāng)舒服,,而json則不然。在這一方面我投XML一票,。 2,、是否易于在服務(wù)端創(chuàng)建數(shù)據(jù) XML已經(jīng)流行了好多年了,故目前流行的編程語言都已經(jīng)存在大量的XML數(shù)據(jù)綁定API去進(jìn)行創(chuàng)建XML,,以java語言為例,,你既可以用JAXB,又可以用XmlBeans,,又或者dom4j,、jdom等去把數(shù)據(jù)寫到xml文件中。而另一方面,,json這一方面的API則相對是一個全新的領(lǐng)域,,盡管如此,json官方網(wǎng)站還是列出了很多令人印象深刻的各種語言的API,,java方面比較著名的有json-lib,,此外gson也算一個。在這一方面,,雖然json相對于XML并不是望塵莫及,,但還是略微遜色一籌,尤其是在復(fù)雜的應(yīng)用方面,,XML方面的API已經(jīng)存在多年,,相對來說成熟穩(wěn)定得多了。 3,、是否易于在客戶端處理數(shù)據(jù) 在客戶端,,要處理XMLHttpRequest請求返回的json格式響應(yīng)數(shù)據(jù)是一件輕而易舉的事情,只需要使用javascript的eval函數(shù)就可以實(shí)現(xiàn)把json格式的數(shù)據(jù)轉(zhuǎn)換成javascript對象,,然后通過對象的屬性去訪問值,,這就是json最優(yōu)雅之處,無數(shù)人為之著迷,。而XML在這一方面就不是那么的友善了,,曾令無數(shù)的程序員頭痛不已,因?yàn)樘幚鞽ML響應(yīng)數(shù)據(jù),,你得通過DOM樹,,這是非常繁瑣且容易出錯的工作。這一點(diǎn),我毫不猶豫地選擇json,。 4,、擴(kuò)展性 可擴(kuò)展性有助于減少生產(chǎn)者與消費(fèi)者之間的數(shù)據(jù)耦合。在AJAX應(yīng)用里,,客戶端腳本應(yīng)該合理地兼容不可知的數(shù)據(jù)擴(kuò)展。 毫無疑問,,XML是可擴(kuò)展的,,但它的擴(kuò)展是有局限的,因?yàn)槿绻阋m應(yīng)擴(kuò)展的話,,那么你的客戶端代碼不得不作出相應(yīng)的改動 如果你在響應(yīng)xml中<firstName>結(jié)點(diǎn)后增加了<middlename>這一結(jié)點(diǎn)的話,,那以上的代碼就要作相應(yīng)的改變,否則會出錯,,也就是說,,XML的擴(kuò)展得伴隨著解析代碼的變更,這可沒有什么魔法可言,。而json則簡單得多,,即使你要增加middleName這一屬性,在js客戶端依然是通過對象訪問屬性值即可,,而不會引起js上的語法出錯之類的錯誤,,導(dǎo)致程序無法執(zhí)行。 5,、調(diào)試和故障排除 這方面需要從服務(wù)端和客戶端兩方面進(jìn)行考慮,,在服務(wù)器端,要確保數(shù)據(jù)是格式良好的和有效的,;在客戶端,,它應(yīng)該容易調(diào)試錯誤的。 使用XML的話會相對容易地檢查數(shù)據(jù)被發(fā)送到客戶端是格式良好的和有效的,。您還可以使用數(shù)據(jù)架構(gòu)(schema)來驗(yàn)證xml的正確性和有效性,。使用JSON,這個任務(wù)是手動的,,并涉及驗(yàn)證響應(yīng)對象中是否包含正確的屬性,。 在客戶端,要從兩者中找到錯誤都是比較困難的,。對于XML,,瀏覽器是完全無法將xml格式化成responseXML;如果對于數(shù)據(jù)量較少的json數(shù)據(jù),,還可以通過firebug來發(fā)現(xiàn)錯誤,,但對于大數(shù)據(jù)量的話,那只能靠手工檢查了,否則也只能坐以待斃了,。
二,、XML
使用XML作為傳輸格式的優(yōu)勢
缺點(diǎn)
三、JSON
優(yōu)點(diǎn)
缺點(diǎn)
四,、實(shí)例
用XML表示中國部分省市數(shù)據(jù)如下:
XML 代碼 復(fù)制
<?xml version='1.0' encoding='utf-8'?>
<country>
<name>中國</name>
<province>
<name>黑龍江</name>
<cities>
<city>哈爾濱</city>
<city>大慶</city>
</cities>
</province>
<province>
<name>廣東</name>
<cities>
<city>廣州</city>
<city>深圳</city>
<city>珠海</city>
</cities>
</province>
<province>
<name>臺灣</name>
<cities>
<city>臺北</city>
<city>高雄</city>
</cities>
</province>
<province>
<name>新疆</name>
<cities>
<city>烏魯木齊</city>
</cities>
</province>
</country>
用JSON表示如下:
C# 代碼 復(fù)制
...{
'name':'中國',
'province':[
...{
'name':'黑龍江',
'cities':...{
'city':['哈爾濱','大慶']
}
},
...{
'name':'廣東',
'cities':...{
'city':['廣州','深圳','珠海']
}
},
...{
'name':'臺灣',
'cities':...{
'city':['臺北','高雄']
}
},
...{
'name':'新疆',
'cities':...{
'city':['烏魯木齊']
}
}
]
}
|
|