一、兩者的共同優(yōu)點(diǎn)是都是文本表示的數(shù)據(jù)格式,可以跨平臺(tái)、跨系統(tǒng)交換數(shù)據(jù)
1、可讀性 兩者都具備很好的可讀性,但從實(shí)際應(yīng)用出發(fā),個(gè)人還是覺得XML文檔的可讀性無疑會(huì)更高,要求你從一大堆的json代碼里看出它的結(jié)構(gòu)層次關(guān)系還是相對(duì)比較困難的;而且現(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則相對(duì)是一個(gè)全新的領(lǐng)域,盡管如此,json官方網(wǎng)站還是列出了很多令人印象深刻的各種語言的API,java方面比較著名的有json-lib,此外gson也算一個(gè)。在這一方面,雖然json相對(duì)于XML并不是望塵莫及,但還是略微遜色一籌,尤其是在復(fù)雜的應(yīng)用方面,XML方面的API已經(jīng)存在多年,相對(duì)來說成熟穩(wěn)定得多了。 3、是否易于在客戶端處理數(shù)據(jù) 在客戶端,要處理XMLHttpRequest請(qǐng)求返回的json格式響應(yīng)數(shù)據(jù)是一件輕而易舉的事情,只需要使用javascript的eval函數(shù)就可以實(shí)現(xiàn)把json格式的數(shù)據(jù)轉(zhuǎn)換成javascript對(duì)象,然后通過對(duì)象的屬性去訪問值,這就是json最優(yōu)雅之處,無數(shù)人為之著迷。而XML在這一方面就不是那么的友善了,曾令無數(shù)的程序員頭痛不已,因?yàn)樘幚鞽ML響應(yīng)數(shù)據(jù),你得通過DOM樹,這是非常繁瑣且容易出錯(cuò)的工作。這一點(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)的改動(dòng) 如果你在響應(yīng)xml中<firstName>結(jié)點(diǎn)后增加了<middlename>這一結(jié)點(diǎn)的話,那以上的代碼就要作相應(yīng)的改變,否則會(huì)出錯(cuò),也就是說,XML的擴(kuò)展得伴隨著解析代碼的變更,這可沒有什么魔法可言。而json則簡(jiǎn)單得多,即使你要增加middleName這一屬性,在js客戶端依然是通過對(duì)象訪問屬性值即可,而不會(huì)引起js上的語法出錯(cuò)之類的錯(cuò)誤,導(dǎo)致程序無法執(zhí)行。 5、調(diào)試和故障排除 這方面需要從服務(wù)端和客戶端兩方面進(jìn)行考慮,在服務(wù)器端,要確保數(shù)據(jù)是格式良好的和有效的;在客戶端,它應(yīng)該容易調(diào)試錯(cuò)誤的。 使用XML的話會(huì)相對(duì)容易地檢查數(shù)據(jù)被發(fā)送到客戶端是格式良好的和有效的。您還可以使用數(shù)據(jù)架構(gòu)(schema)來驗(yàn)證xml的正確性和有效性。使用JSON,這個(gè)任務(wù)是手動(dòng)的,并涉及驗(yàn)證響應(yīng)對(duì)象中是否包含正確的屬性。 在客戶端,要從兩者中找到錯(cuò)誤都是比較困難的。對(duì)于XML,瀏覽器是完全無法將xml格式化成responseXML;如果對(duì)于數(shù)據(jù)量較少的json數(shù)據(jù),還可以通過firebug來發(fā)現(xiàn)錯(cuò)誤,但對(duì)于大數(shù)據(jù)量的話,那只能靠手工檢查了,否則也只能坐以待斃了。
二、XML
使用XML作為傳輸格式的優(yōu)勢(shì)
缺點(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>臺(tái)灣</name>
<cities>
<city>臺(tái)北</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':'臺(tái)灣',
'cities':...{
'city':['臺(tái)北','高雄']
}
},
...{
'name':'新疆',
'cities':...{
'city':['烏魯木齊']
}
}
]
}
|
|