JSON 和 JavaScript eval使用說明
更新時間:2010年06月13日 00:13:23 作者:
JSON (JavaScript Object Notation) 一種輕量級的數(shù)據(jù)交換格式,比 XML 更輕巧,JSON 是JavaScript 原生格式,這意味著 JavaScript 中處理 JSON 數(shù)據(jù)不需要任何 API 和工具包。
JSON 格式可以使對象(object)、數(shù)組(array)、值(value)、字符串(string)、數(shù)值(number)。
<script type="text/javascript">
var user = {
"Name":"Andy",
"Sex" :"man",
"Age" :"20",
"Phone":{"mobilephone":"123456789","telephone":"1234-12345678"},
"baby":[{"big":"xiaohong"},{"middle":"xiaoming"},{"small":"xiaoli"}] //包含數(shù)組
}
alert(user.Name);
alert(user.Phone.mobilephone);
alert(user.baby[0].big);
user.baby[0].big = "--";//修改了 JSON 值
alert(user.baby[0].big);
</script>
參考:http://www.json.org/json-zh.html
下面來看看 JavaScript 的 eval 函數(shù)。
eval 函數(shù)會評估給定的一個JavaScript代碼的字符串,并試圖去執(zhí)行包含在字符串里的表達(dá)式或者一系列的合法的 JavaScript 語句。eval 函數(shù)將把最后一個表達(dá)式或者語句包含的值或引用作為返回值。
代碼
<script type="text/javascript">
var bar = "bar";
var foobar = eval('"foo"+bar');
alert(bar + foobar);//執(zhí)行語句
foobar = eval('if(bar = "bar"){bar = "foo-bar";}else{bar = "bar-foo";}');
alert(foobar);//返回語句中包含的值
</script>
JSON 和 對象字面量(Object Literals)的區(qū)別:JSON 的名字部分嚴(yán)格用引號+名字來表示。
代碼
<script type="text/javascript">
//對象字面量
var objectLiteral = {
name:"Objector.L",
age:"24",
special:"JavaScript",
sayName:function(){
return this.name;
}
};
//JSON 對象
var jsonFormat = {
"summary":"Blogs",
"blogrolls":[
{
"title":"Explore JavaScript",
"link":"http://example.com"
},
{
"title":"Explore JavaScript",
"link":"http://example.com"
}
]
};
</script>
由于 Ajax 的興起, JSON 這種輕量級的數(shù)據(jù)格式作為客戶端與服務(wù)器端之間傳輸?shù)母袷街饾u流行起來,進(jìn)而出現(xiàn)的問題是如何將服務(wù)器端構(gòu)建好的 JSON 數(shù)據(jù)轉(zhuǎn)換為可用的 JavaScript 對象,利用 eval 函數(shù)無疑是一種簡單而直接的方法。在轉(zhuǎn)化的時候需要將 JSON 字符串的外面包裝一層園括號:
var jsonObject = eval("("+ jsonFormat +")")
加園括號的目的是迫使 eval 函數(shù)在評估 JavaScript 代碼的時候強(qiáng)制將括號內(nèi)的表達(dá)式(expression)轉(zhuǎn)換為對象,而不是作為語句(statement)來執(zhí)行。舉一個例子,例如對象字面量{},如若不佳加外層的括號,那么eval會將大括號之別為JavaScript代碼塊的開始結(jié)束標(biāo)記機(jī),那么{}將被認(rèn)為是執(zhí)行了一句空語句。所以下面兩個執(zhí)行結(jié)果是不同的:
alert(eval("{}")); //return undefined
alert(eval("({})")); //return [object Object]
JSON 格式的名字部分為什么要加引號?因為eval函數(shù)會將{foo:"bar"}解釋成合法的JavaScript 語句,而非表達(dá)式。但人們往往是想讓eval將這段代碼解釋成一個對象。所以JSON 格式會強(qiáng)制你去在名字的外側(cè)加上引號,再結(jié)合圓括號,eval就不會錯誤的將JSON解釋成代碼塊。
//eval 錯誤解析語義
alert(eval('{foo:"bar"}')); //return "bar",incorrect
//eval 正確解析JSON
alert(eval('({"foo":"bar"})'));//return JSON object,correct
復(fù)制代碼 代碼如下:
<script type="text/javascript">
var user = {
"Name":"Andy",
"Sex" :"man",
"Age" :"20",
"Phone":{"mobilephone":"123456789","telephone":"1234-12345678"},
"baby":[{"big":"xiaohong"},{"middle":"xiaoming"},{"small":"xiaoli"}] //包含數(shù)組
}
alert(user.Name);
alert(user.Phone.mobilephone);
alert(user.baby[0].big);
user.baby[0].big = "--";//修改了 JSON 值
alert(user.baby[0].big);
</script>
參考:http://www.json.org/json-zh.html
下面來看看 JavaScript 的 eval 函數(shù)。
eval 函數(shù)會評估給定的一個JavaScript代碼的字符串,并試圖去執(zhí)行包含在字符串里的表達(dá)式或者一系列的合法的 JavaScript 語句。eval 函數(shù)將把最后一個表達(dá)式或者語句包含的值或引用作為返回值。
代碼
復(fù)制代碼 代碼如下:
<script type="text/javascript">
var bar = "bar";
var foobar = eval('"foo"+bar');
alert(bar + foobar);//執(zhí)行語句
foobar = eval('if(bar = "bar"){bar = "foo-bar";}else{bar = "bar-foo";}');
alert(foobar);//返回語句中包含的值
</script>
JSON 和 對象字面量(Object Literals)的區(qū)別:JSON 的名字部分嚴(yán)格用引號+名字來表示。
代碼
復(fù)制代碼 代碼如下:
<script type="text/javascript">
//對象字面量
var objectLiteral = {
name:"Objector.L",
age:"24",
special:"JavaScript",
sayName:function(){
return this.name;
}
};
//JSON 對象
var jsonFormat = {
"summary":"Blogs",
"blogrolls":[
{
"title":"Explore JavaScript",
"link":"http://example.com"
},
{
"title":"Explore JavaScript",
"link":"http://example.com"
}
]
};
</script>
由于 Ajax 的興起, JSON 這種輕量級的數(shù)據(jù)格式作為客戶端與服務(wù)器端之間傳輸?shù)母袷街饾u流行起來,進(jìn)而出現(xiàn)的問題是如何將服務(wù)器端構(gòu)建好的 JSON 數(shù)據(jù)轉(zhuǎn)換為可用的 JavaScript 對象,利用 eval 函數(shù)無疑是一種簡單而直接的方法。在轉(zhuǎn)化的時候需要將 JSON 字符串的外面包裝一層園括號:
var jsonObject = eval("("+ jsonFormat +")")
加園括號的目的是迫使 eval 函數(shù)在評估 JavaScript 代碼的時候強(qiáng)制將括號內(nèi)的表達(dá)式(expression)轉(zhuǎn)換為對象,而不是作為語句(statement)來執(zhí)行。舉一個例子,例如對象字面量{},如若不佳加外層的括號,那么eval會將大括號之別為JavaScript代碼塊的開始結(jié)束標(biāo)記機(jī),那么{}將被認(rèn)為是執(zhí)行了一句空語句。所以下面兩個執(zhí)行結(jié)果是不同的:
復(fù)制代碼 代碼如下:
alert(eval("{}")); //return undefined
alert(eval("({})")); //return [object Object]
JSON 格式的名字部分為什么要加引號?因為eval函數(shù)會將{foo:"bar"}解釋成合法的JavaScript 語句,而非表達(dá)式。但人們往往是想讓eval將這段代碼解釋成一個對象。所以JSON 格式會強(qiáng)制你去在名字的外側(cè)加上引號,再結(jié)合圓括號,eval就不會錯誤的將JSON解釋成代碼塊。
復(fù)制代碼 代碼如下:
//eval 錯誤解析語義
alert(eval('{foo:"bar"}')); //return "bar",incorrect
//eval 正確解析JSON
alert(eval('({"foo":"bar"})'));//return JSON object,correct
您可能感興趣的文章:
- js中eval詳解
- eval(function(p,a,c,k,e,d)系列解密javascript程序
- jquery eval解析JSON中的注意點(diǎn)介紹
- javascript eval和JSON之間的聯(lián)系
- jqeury eval將字符串轉(zhuǎn)換json的方法
- js使用eval解析json(js中使用json)
- js下用eval生成JSON對象
- js中eval()函數(shù)和trim()去掉字符串左右空格應(yīng)用
- JavaScript eval() 函數(shù)介紹及應(yīng)用示例
- JavaScript的eval JSON object問題
- JavaScript中的eval()函數(shù)詳解
- 了解一點(diǎn)js的Eval函數(shù)
- JS使用eval()動態(tài)創(chuàng)建變量的方法
相關(guān)文章
jQuery 遍歷json數(shù)組的實現(xiàn)代碼
看到網(wǎng)上有很多朋友問遍歷json數(shù)組的代碼,腳本之家特為大家整理了一些,需要的朋友可以看下。2010-03-03
什么是json和jsonp,jQuery json實例詳詳細(xì)說明
JSON能夠以非常簡單的方式來描述數(shù)據(jù)結(jié)構(gòu),XML能做的它都能做,因此在跨平臺方面兩者完全不分伯仲.其實網(wǎng)上關(guān)于JSONP的講解有很多,但卻千篇一律,用自己的方式來闡釋一下這個問題,看看是否有幫助2012-12-12
詳解Java中String JSONObject JSONArray List<實體類>轉(zhuǎn)換
這篇文章主要介紹了詳解String JSONObject JSONArray List<實體類>轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
js解析與序列化json數(shù)據(jù)(三)json的解析探討
這一節(jié)我們主要討論json的解析,感興趣的朋友可以了解下,JSON.parse()方法也可以接收另一個參數(shù),該參數(shù)是一個函數(shù),將早每個鍵值對上調(diào)用,好了,話不多說,希望本文對你有所幫助2013-02-02

