JSON是一種正在網(wǎng)絡(luò )上慢慢興起的數據交換格式。就象AJAX并不是什么新技術(shù)一樣,JSON也沒(méi)有提供什么新格式,它基于ECMAScript標準中對ObjectLiteral的定義(ECMA-262, 11.1.5),早就被javascript支持。
格式定義非常簡(jiǎn)單,就是通過(guò)一組鍵值對來(lái)定義一個(gè)對象。在javascript中,你可以直接將這種格式的數據賦值給一個(gè)變量,然后通過(guò)鍵名取值。相對于使用xml來(lái)作為數據交換格式,如果要在javascript里使用,首先需要創(chuàng )建一個(gè)DOMParser,然后通過(guò)DOM接口訪(fǎng)問(wèn)節點(diǎn)對象,非常繁瑣,更不用說(shuō)不同瀏覽器的實(shí)現中DOMParser的實(shí)現和DOM接口都有諸多不同。為什么大量的AJAX應用中寧可直接返回一個(gè)HTML片斷而不是直接把XML交給javascript處理,一個(gè)主要原因就是處理XML的過(guò)程比較復雜。JSON最重要的貢獻就是簡(jiǎn)化了解析數據的過(guò)程。
del.icio.us提供的在網(wǎng)頁(yè)上顯示書(shū)簽的javascript腳本就基于JSON,看一下這個(gè)腳本,再設想一下通過(guò)AJAX讀取del.icio.us提供的RSS接口來(lái)實(shí)現這個(gè)功能,就能體會(huì )JSON的巧妙了。
除此之外,更有人提出類(lèi)似XSLT的JSONT,可以將JSON格式的內容轉換成其他形式,雖然還暫時(shí)還沒(méi)有XSLT靈活和強大,至少展示了一種可能性。
JSON解決的另一個(gè)傳統AJAX中xmlhttprequest不能解決的問(wèn)題就是跨域鏈接的問(wèn)題?;诎踩紤],各種瀏覽器缺省都不允許xmlhttprequest跨域名鏈接,abc.com頁(yè)面上的xmlhttprequest是無(wú)法連接def.com的內容的。在網(wǎng)頁(yè)中,JSON可以采用引入script元素的方式導入數據,html中的script可以指定非本地腳本,跨域鏈接的問(wèn)題得以解決。但使用這樣的方式導入JSON數據,是一個(gè)同步的過(guò)程(是否可以用defer屬性來(lái)實(shí)現異步?),這點(diǎn)上不如xmlhttpreqeust靈活。

