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