JSON 最常見的用法之一,是從 web 服務(wù)器上讀取 JSON 數(shù)據(jù)(作為文件或作為 HttpRequest),將 JSON 數(shù)據(jù)轉(zhuǎn)換為 JavaScript 對(duì)象,然后在網(wǎng)頁中使用該數(shù)據(jù)。
為了更簡(jiǎn)單地為您講解,我們使用字符串作為輸入進(jìn)行演示(而不是文件)。
創(chuàng)建包含 JSON語法的 JavaScript 字符串:
var txtJson = '{ "star_male" : [' + '{ "name":"鹿晗" , "age":26 },' + '{ "name":"李易峰" , "age":29 },' + '{ "name":"陳赫" , "age":31 } ]}';
由于 JSON語法是 JavaScript 語法的子集,JavaScript 函數(shù) eval() 可用于將 JSON 文本轉(zhuǎn)換為 JavaScript 對(duì)象。
eval() 函數(shù)使用的是 JavaScript 編譯器,可解析 JSON 文本,然后生成 JavaScript 對(duì)象。必須把文本包圍在括號(hào)中,這樣才能避免語法錯(cuò)誤:
var obj = eval ("(" + txtJson + ")");
JSON 值可以是:
var txtJson = '{ "star_male" : [' + '{ "name":"鹿晗" , "age":26 },' + '{ "name":"李易峰" , "age":29 },' + '{ "name":"陳赫" , "age":31 } ]}'; //利用函數(shù) eval() 轉(zhuǎn)換成JSON對(duì)象 var obj = eval ("(" + txtJson + ")"); //輸出數(shù)組的第一個(gè)對(duì)象的name值 alert("得到的值:" + obj.star_male[0].name);
提示:eval()
函數(shù)可編譯并執(zhí)行任何 JavaScript
代碼。這隱藏了一個(gè)潛在的安全問題。
使用 JSON解析器將 JSON 轉(zhuǎn)換為 JavaScript
對(duì)象是更安全的做法。JSON
解析器只能識(shí)別 JSON
文本,而不會(huì)編譯腳本。
在瀏覽器中,這提供了原生的 JSON
支持,而且 JSON
解析器的速度更快。
JSON
解析器 eval()
安全問題說明大家都知道eval()
函數(shù)就是evaluation
:
它的特點(diǎn)如果遇到運(yùn)算符(/、*、-、+、>>
等),它會(huì)直接計(jì)算結(jié)果,下面我們來看 一個(gè)Demo
//假如鹿晗有一張CD,name為“26-11”。 var txtJson = '{' + '"name": "鹿晗",' + '"cd_name": 26-11' + '}'; //利用函數(shù) eval() 轉(zhuǎn)換成JSON對(duì)象 var obj = eval ("(" + txtJson + ")"); //輸出cd_name alert("cd_name:" + obj.cd_name);
運(yùn)行一下,你會(huì)驚訝的發(fā)現(xiàn),結(jié)果為:
cd_name:15
結(jié)果為:26 - 11 = 15;
結(jié)論:得出的結(jié)果如果字符串里含有運(yùn)算符,那么用 eval()
不安全,它的結(jié)果是運(yùn)算后的結(jié)果。
版權(quán)所屬:SOJSON(原創(chuàng)文章)
原文地址:http://zijieyoumin.cn/json/json_eval.html
轉(zhuǎn)載時(shí)必須以鏈接形式注明原始出處及本聲明。
綜合技術(shù)交流:點(diǎn)擊加入--> [SO JSON官方交流①群][收費(fèi)]
綜合技術(shù)交流:點(diǎn)擊加入--> [SO JSON官方交流②群][免費(fèi)]
要求:不能發(fā)廣告、暴力、政治、付費(fèi)教程,違者直接踢出。
備注:入群費(fèi)用5元,沒有QQ錢包,可以先支付寶
or 微信
掃碼支付5元贊助后,我拉您進(jìn)去。QQ聯(lián)系我。
掃碼贊助:贊助二維碼。
技術(shù)交流QQ群:①群259217951,②群166848545
站長(zhǎng)郵箱:so@sojson.com
對(duì)頁面內(nèi)容有任何疑問和建議,請(qǐng)聯(lián)系我們。
所有贊助/開支都講公開明細(xì),用于網(wǎng)站維護(hù):贊助名單查看
正在加載... ...