JavaScript 是一種被介紹為運行在網景瀏覽器上,面向目的的頁面指令碼程式設計語言。很多人認為它是Java的一個子集,但它不是。它是一種方案--是一種類似於C語言的文法並且弱類型的語言。JavaScript在ECMAScript Language Specification, Third Edition.裡面被標準化。
JSON是指令碼目標原義標記的一個子集。因為JSON是指令碼的一個子集,所以你可以毫無疑問地使用它。
var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
};
在這個樣本裡,程式建立了一個對象,這個對象只有一個"bindings"成員。這個"bindings"成員有一個包含了三個對象的數組,每個對象都包含了"ircEvent","method","regex"成員。
成員可以通過使用小圓點或下標來擷取。例如通過myJSONObject.bindings[0].method就能擷取倒"newURI"成員。
myJSONObject.bindings[0].method // "newURI"
可以使用eval()函數將一個JSON文本轉化為一個對象。eval()函數負責呼叫指令碼編譯器。因為JSON是指令碼的一個專屬子集,所以編譯器將正確地解析文本並且創造一個類結構。
var myObject = eval('(' + myJSONtext + ')');
Eval函數是非常快的。然而,它可以編譯並執行任何指令碼程式,因此它可能會帶來安全問題。只有原始碼是被信任併合法的才可以使用eval函數。當網路伺服器同時提供基頁和JSON資料時,在網路應用程式裡,這是非常普遍的。有時候原始碼是不被信任的。事實上,用戶端從不被信任。
當安全比較重要的時候使用JSON解析就好一些。JSON解析只會識別JSON文本並且它更安全。JSON如下所示:
var myObject = JSON.parse(myJSONtext, filter);
可選的參數filter是一個函數。這個函數將被最終結果的每一層的每一個鍵和值調用。每一個值都將被filter函數的結果替代。這可以用於將一般的對象轉化為一些特定對象的執行個體。如下所示:
myData = JSON.parse(text, function (key, value) {
return key.indexOf('date') >= 0 ? new Date(value) : value;
});
JSON stringifier則走向一個相反的方向,它將指令碼資料轉化為JSON文本。JSON不支援迴圈的資料結構,因此不要向JSON stringifier裡傳入迴圈的結構。
var myJSONText = JSON.stringify(myObject);
如果stringify方法遇到一個對象包含了toJSON方法,它就會調用這個方法,然後返回這個值。這樣就允許一個對象去定義它自己的JSON代理。
Stringifier方法可以接收一個可選的字元數組。這些字串被用來遴選包含在JSON文本裡的屬性。然而,對象的所有屬性都將被包含在內。在任何情況下,JSON裡的值如果沒有代理將會被排除(例如函數和未定義)。
The open source code of a JSON parser and JSON stringifier is available. When minified it is less than 2K.