詳細(xì)說(shuō)明JSON 字符串進(jìn)行交換數(shù)據(jù)簡(jiǎn)介
由于 JSON 只是 JavaScript 文字的子集,因此可以使用將源JSON 字符串視為 JavaScript 源代碼的 eval(expr) 函數(shù),來(lái)分析內(nèi)存中表示形式,。eval 函數(shù)接受輸入有效 JavaScript 代碼的字符串,并計(jì)算表達(dá)式結(jié)果。
因此,將 JSON 用作數(shù)據(jù)格式的大多數(shù)應(yīng)用程序通常會(huì)使用字符串或數(shù)字來(lái)表示日期和時(shí)間值。如果使用的是字符串,您通常希望它是 ISO 8601 格式。如果使用的是數(shù)字,該值通常表示從JSON 字符串、以通用協(xié)調(diào)時(shí)間 (UTC) 表示的毫秒數(shù),其中 epoch 定義為 1970 年 1 月 1 日午夜 (UTC)。同樣,這僅僅是個(gè)慣例,而不是 JSON 標(biāo)準(zhǔn)的一部分。
如果您要與其他應(yīng)用程序交換數(shù)據(jù),則需要檢查其文檔,查看它對(duì) JSON 文字內(nèi)的日期和時(shí)間值是如何進(jìn)行編碼的。例如,Microsoft 的 ASP.NET AJAX 使用的就不是上述任一種慣例。它代之以將 .NET DateTime 值編碼為 JSON 字符串,字符串內(nèi)容是 \/Date(ticks)\/,其中 ticks 表示從 epoch (UTC) 開(kāi)始的毫秒數(shù)。
ASP.NEXT 中的 AJAX JSON 序列化程序?qū)?DateTime 實(shí)例編碼為 JSON 字符串。在預(yù)發(fā)布周期中,ASP.NET AJAX 使用格式“@ticks@”,其中 ticks 表示從通用協(xié)調(diào)時(shí)間 (UTC) 1970 年 1 月 1 日起經(jīng)過(guò)的毫秒數(shù)。以 UTC 表示的日期和時(shí)間。#t#
(如 1989 年 11 月 29 日 4:55:30 AM)會(huì)編碼為“@62831853071@”。雖然簡(jiǎn)單易懂,但此格式無(wú)法區(qū)分序列化的日期和時(shí)間值與看起來(lái)像序列化日期但又不需要進(jìn)行反序列化的值。因此,ASP.NET AJAX 團(tuán)隊(duì)對(duì)最終版本進(jìn)行了更改,通過(guò)采用“\/Date(ticks)\/”格式解決了這一問(wèn)題。
JSON 和 XML 均能夠以基于文本、便于讀者閱讀的數(shù)據(jù)交換格式來(lái)表示本機(jī)內(nèi)存中對(duì)象。此外,兩種數(shù)據(jù)交換格式是同構(gòu)的,只要文本是一種格式,即可得出另外一種格式的等效文本。例如,調(diào)用 可公開(kāi)訪問(wèn)的 Yahoo! web 服務(wù)之一時(shí),您可以通過(guò) querystring 參數(shù)指明響應(yīng)需要設(shè)置為 XML 還是 JSON 格式。
因此,決定數(shù)據(jù)交換格式時(shí),不是簡(jiǎn)單的選此或彼作為銀彈的問(wèn)題,而是要看哪種格式具有成為特定應(yīng)用程序的***選擇的“特征”。
例如,JSON 字符串 起源于標(biāo)記文檔文本,而且有繼續(xù)在該領(lǐng)域發(fā)揚(yáng)光大的趨勢(shì)(XHTML 就是很好的證明)。而 JSON 則起源于編程語(yǔ)言類(lèi)型和結(jié)構(gòu),因此提供了更加自然和便于使用的交換結(jié)構(gòu)化數(shù)據(jù)映射。除了這兩個(gè)起點(diǎn)之外,下表可幫助您了解和比較 XML 與 JSON 的重要特征。