JavaScript中的JSON 中文版翻譯
更新時(shí)間:2009年10月31日 22:37:08 作者:
JSON是JavaScript面向?qū)ο笳Z(yǔ)法的一個(gè)子集。由于JSON是JavaScript的一個(gè)子集,因此它可清晰的運(yùn)用于此語(yǔ)言中。
大家看可以先看下面的例子
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
JavaScript這種編程語(yǔ)言首要的目的是為Netscape Navigator提供一種頁(yè)面腳本語(yǔ)言。它仍被普遍的認(rèn)為是Java的一個(gè)子集,但事實(shí)并非如此。它是一種語(yǔ)法類似c語(yǔ)言并且支持面向?qū)ο蟮腟cheme-like語(yǔ)言。JavaScript使用了ECMAScript語(yǔ)言規(guī)范第三版進(jìn)行了標(biāo)準(zhǔn)化。
JSON是JavaScript面向?qū)ο笳Z(yǔ)法的一個(gè)子集。由于JSON是JavaScript的一個(gè)子集,因此它可清晰的運(yùn)用于此語(yǔ)言中。
var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
};
上面的示例,創(chuàng)建了一個(gè)包括單獨(dú)成員”bindings”的對(duì)象,此成員包括一個(gè)含有三個(gè)對(duì)象(”ircEvent”, “method”, 與 “regex”)的數(shù)組
成員可以通過.或者下標(biāo)操作符檢索。
myJSONObject.bindings[0].method // "newURI"
為了將JSON文本轉(zhuǎn)換為對(duì)象,可以使用eval()函數(shù)。eval()函數(shù)調(diào)用JavaScript編輯器。由于JSON是JavaScript的子集,因此編譯器將正確的解析文本并產(chǎn)生對(duì)象結(jié)構(gòu)。文本必須括在括號(hào)中避免產(chǎn)生JavaScript的語(yǔ)法歧義。
var myObject = eval('(' + myJSONtext + ')');
eval函數(shù)非??焖佟K梢跃幾g執(zhí)行任何JavaScript程序,因此產(chǎn)生了安全性問題。當(dāng)使用可信任與完善的源代碼時(shí)才可以使用eval函數(shù)。這樣可以更安全的使用JSON解析器。使用XMLHttpRequest的web應(yīng)用,頁(yè)面之間的通訊只允許同源,因此是可以信任的。但這卻不是完善的。如果服務(wù)器沒有嚴(yán)謹(jǐn)?shù)腏SON編碼,或者沒有嚴(yán)格的輸入驗(yàn)證,那么可能傳送包括危險(xiǎn)腳本的無(wú)效JSON文本。eval函數(shù)將執(zhí)行惡意的腳本。
使用JSON解析器可以防止此類事件。JSON解析器只能辨識(shí)JSON文本,拒絕所有腳本。提供了本地JSON支持的瀏覽器的JSON解析器將遠(yuǎn)快于eval函數(shù)。預(yù)計(jì)未來的ECMAScript標(biāo)準(zhǔn)將支持本地JSON。
var myObject = JSON.parse(myJSONtext, reviver);
一個(gè)替換函數(shù)(reviver function)做為可選參數(shù)被最終結(jié)果的每一級(jí)的鍵(key)與值(value)調(diào)用。 每個(gè)值都將被替換函數(shù)的值代替。這可以用來將一般的類改變成偽類的實(shí)例,或者將日期字符串轉(zhuǎn)變?yōu)槿掌趯?duì)象。
myData = JSON.parse(text, function (key, value) {
var type;
if (value && typeof value === 'object') {
type = value.type;
if (typeof type === 'string' && typeof window[type] === 'function') {
return new (window[type])(value);
}
}
return value;
});
JSON stringifier進(jìn)行反向操作,可以把JavaScript數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為JSON文本。JSON不支持循環(huán)數(shù)據(jù)結(jié)構(gòu),因此應(yīng)小心不要為JSON stringifier提供循環(huán)結(jié)構(gòu)。
var myJSONText = JSON.stringify(myObject, replacer);
如果stringify函數(shù)發(fā)現(xiàn)一個(gè)帶有toJSON方法的對(duì)象,它將執(zhí)行此方法,并且返回產(chǎn)生的值。這樣一個(gè)對(duì)象就可以決定自己的JSON表現(xiàn)。
stringifier方法可以攜帶一個(gè)可選的字符串?dāng)?shù)組。這些字符串被用于選擇包括在JSON文本中的屬性。
stringifier方法可以攜帶一個(gè)可選的替代(replacer)函數(shù)。它將在結(jié)構(gòu)中每個(gè)值的toJSON方法(如果有的話)后面執(zhí)行。它將每個(gè)鍵與值做為參數(shù)傳遞,當(dāng)然對(duì)象要包含這個(gè)鍵。返回值將被字符串化。
如果沒有提供數(shù)組或替代函數(shù),一個(gè)用于忽略被集成的屬性的可選替代函數(shù)將被提供。如果想要所有被繼承的屬性,可以提供一個(gè)簡(jiǎn)單的替換函數(shù):
var myJSONText = JSON.stringify(myObject, function (key, value) {
return value;
});
對(duì)于在JSON中沒有表達(dá)的值(如函數(shù)與undefined)是排除在外的。
不能確定的數(shù)量將被替換為null。為了替代其它的值,可以像下面一樣使用替換(replacer)函數(shù)
function replacer(key, value) {
if (typeof value === 'number' && !isFinite(value)) {
return String(value);
}
return value;
}
開放源代碼的JSON解析器與JSON stringifier可以使用。通過minified可以小于2.5K。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
JavaScript這種編程語(yǔ)言首要的目的是為Netscape Navigator提供一種頁(yè)面腳本語(yǔ)言。它仍被普遍的認(rèn)為是Java的一個(gè)子集,但事實(shí)并非如此。它是一種語(yǔ)法類似c語(yǔ)言并且支持面向?qū)ο蟮腟cheme-like語(yǔ)言。JavaScript使用了ECMAScript語(yǔ)言規(guī)范第三版進(jìn)行了標(biāo)準(zhǔn)化。
JSON是JavaScript面向?qū)ο笳Z(yǔ)法的一個(gè)子集。由于JSON是JavaScript的一個(gè)子集,因此它可清晰的運(yùn)用于此語(yǔ)言中。
復(fù)制代碼 代碼如下:
var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
};
上面的示例,創(chuàng)建了一個(gè)包括單獨(dú)成員”bindings”的對(duì)象,此成員包括一個(gè)含有三個(gè)對(duì)象(”ircEvent”, “method”, 與 “regex”)的數(shù)組
成員可以通過.或者下標(biāo)操作符檢索。
復(fù)制代碼 代碼如下:
myJSONObject.bindings[0].method // "newURI"
為了將JSON文本轉(zhuǎn)換為對(duì)象,可以使用eval()函數(shù)。eval()函數(shù)調(diào)用JavaScript編輯器。由于JSON是JavaScript的子集,因此編譯器將正確的解析文本并產(chǎn)生對(duì)象結(jié)構(gòu)。文本必須括在括號(hào)中避免產(chǎn)生JavaScript的語(yǔ)法歧義。
復(fù)制代碼 代碼如下:
var myObject = eval('(' + myJSONtext + ')');
eval函數(shù)非??焖佟K梢跃幾g執(zhí)行任何JavaScript程序,因此產(chǎn)生了安全性問題。當(dāng)使用可信任與完善的源代碼時(shí)才可以使用eval函數(shù)。這樣可以更安全的使用JSON解析器。使用XMLHttpRequest的web應(yīng)用,頁(yè)面之間的通訊只允許同源,因此是可以信任的。但這卻不是完善的。如果服務(wù)器沒有嚴(yán)謹(jǐn)?shù)腏SON編碼,或者沒有嚴(yán)格的輸入驗(yàn)證,那么可能傳送包括危險(xiǎn)腳本的無(wú)效JSON文本。eval函數(shù)將執(zhí)行惡意的腳本。
使用JSON解析器可以防止此類事件。JSON解析器只能辨識(shí)JSON文本,拒絕所有腳本。提供了本地JSON支持的瀏覽器的JSON解析器將遠(yuǎn)快于eval函數(shù)。預(yù)計(jì)未來的ECMAScript標(biāo)準(zhǔn)將支持本地JSON。
復(fù)制代碼 代碼如下:
var myObject = JSON.parse(myJSONtext, reviver);
一個(gè)替換函數(shù)(reviver function)做為可選參數(shù)被最終結(jié)果的每一級(jí)的鍵(key)與值(value)調(diào)用。 每個(gè)值都將被替換函數(shù)的值代替。這可以用來將一般的類改變成偽類的實(shí)例,或者將日期字符串轉(zhuǎn)變?yōu)槿掌趯?duì)象。
復(fù)制代碼 代碼如下:
myData = JSON.parse(text, function (key, value) {
var type;
if (value && typeof value === 'object') {
type = value.type;
if (typeof type === 'string' && typeof window[type] === 'function') {
return new (window[type])(value);
}
}
return value;
});
JSON stringifier進(jìn)行反向操作,可以把JavaScript數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為JSON文本。JSON不支持循環(huán)數(shù)據(jù)結(jié)構(gòu),因此應(yīng)小心不要為JSON stringifier提供循環(huán)結(jié)構(gòu)。
復(fù)制代碼 代碼如下:
var myJSONText = JSON.stringify(myObject, replacer);
如果stringify函數(shù)發(fā)現(xiàn)一個(gè)帶有toJSON方法的對(duì)象,它將執(zhí)行此方法,并且返回產(chǎn)生的值。這樣一個(gè)對(duì)象就可以決定自己的JSON表現(xiàn)。
stringifier方法可以攜帶一個(gè)可選的字符串?dāng)?shù)組。這些字符串被用于選擇包括在JSON文本中的屬性。
stringifier方法可以攜帶一個(gè)可選的替代(replacer)函數(shù)。它將在結(jié)構(gòu)中每個(gè)值的toJSON方法(如果有的話)后面執(zhí)行。它將每個(gè)鍵與值做為參數(shù)傳遞,當(dāng)然對(duì)象要包含這個(gè)鍵。返回值將被字符串化。
如果沒有提供數(shù)組或替代函數(shù),一個(gè)用于忽略被集成的屬性的可選替代函數(shù)將被提供。如果想要所有被繼承的屬性,可以提供一個(gè)簡(jiǎn)單的替換函數(shù):
復(fù)制代碼 代碼如下:
var myJSONText = JSON.stringify(myObject, function (key, value) {
return value;
});
對(duì)于在JSON中沒有表達(dá)的值(如函數(shù)與undefined)是排除在外的。
不能確定的數(shù)量將被替換為null。為了替代其它的值,可以像下面一樣使用替換(replacer)函數(shù)
復(fù)制代碼 代碼如下:
function replacer(key, value) {
if (typeof value === 'number' && !isFinite(value)) {
return String(value);
}
return value;
}
開放源代碼的JSON解析器與JSON stringifier可以使用。通過minified可以小于2.5K。
相關(guān)文章
打印json對(duì)象的內(nèi)容及JSON.stringify函數(shù)應(yīng)用
json對(duì)象的內(nèi)容在調(diào)試的時(shí)候用的到通過JSON.stringify函數(shù),可以轉(zhuǎn)換json對(duì)象為字符串,接下來為大家詳細(xì)介紹下,感興趣的朋友可以參考下哈2013-03-03Json對(duì)象替換字符串占位符實(shí)現(xiàn)代碼
實(shí)現(xiàn)根據(jù)提供的Json對(duì)象去替換字符串中相應(yīng)的占位符。需要的朋友可以參考下。2010-11-11json的前臺(tái)操作和后臺(tái)操作實(shí)現(xiàn)代碼
通常情況下,json的在項(xiàng)目中的應(yīng)用都是在后臺(tái)把數(shù)據(jù)傳到前臺(tái),然后前臺(tái)再獲取json中的數(shù)據(jù).2012-01-01javascript操作JSON的要領(lǐng)總結(jié)
JSON是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON數(shù)據(jù)不須要任何特殊的 API 或工具包,需要的朋友可以了解下2012-12-12深入javascript json QQ網(wǎng)頁(yè)登陸
下面是個(gè)類似QQ網(wǎng)頁(yè)登陸的一個(gè)對(duì)話框(DIV), js + json 動(dòng)態(tài)生成.2009-07-07