json也是物件,可以直接使用物件呼叫
var json = }};
json.contry.area.man=12萬
1、不安全的方法:
var json = }};
方式一:使用eval解析
var obj = eval(json);
alert(obj.constructor);
alert(obj.contry.area.women); //10萬
方式二:使用funtion函式
var strjson = "";//得到的json
var obj = new function("return" + strjson)();//轉換後的json物件
alert(obj.name);//json name
alert(obj.constructor);
2、其他方法:
1這種形式將使得效能顯著降低,因為它必須執行編譯器
2eval函式還減弱了你的應用的安全性,因為它給被求值的文字賦予了太多的權力。就像with語句執行的方式一樣,它降低了語言的效能
3function構造器是eval的另一種形式,所以它同樣也應該被避免使用。
另外參考
eval(); //此方法不推薦
json.parse(); //推薦方法
一、兩種方法的區別
我們先初始化乙個json格式的物件:
var jsondate = ''
var jsonobj = eval( '(' + jsondate + ')' ); // eval();方法
var jsonobj = json.parse( jsondate ); // json.parse(); 方法
然後在控制台呼叫:
console.log( jsonobj.name ); // 兩種方法都可以正確輸入 周星馳
那麼問題來了 兩種方法有什麼區別呢?(下面我們稍微把**改動一下,藍色字型為修改部分)
var jsondate = ''
var jsonobj = eval( '(' + jsondate + ')' ); // eval();方法
console.log( jsonobj.age ); //會先執行「alert」輸出「hello」 然後才輸出 23
換「json.parse();」方法:
var jsondate = ''
var jsonobj = json.parse( jsondate ); // json.parse(); 方法
cosole.log( jsonobj.age ) // 報錯 這個錯誤告訴我們這個字串是不合法的
小結:「eval();」方法解析的時候不會去判斷字串是否合法,而且json物件中的js方法也會被執行,這是非常危險的;而「json.parse();」方法的優點就不用多說了,推薦此方法。(不明白的盆友可以自己在控制台測試一下)
二、擴充套件問題
var jsondate = ''
大家可以看到在上面測試時一直用紅色把包在花括號外面的引號標註了起來,這對引號是很關鍵卻又是常常被忽略的,因為 「eval();」 和 「json.parser();」 這兩個方法的引數只接受字串,也就是說只能解析字串!!
那我不經會有乙個思考,我們在初始化的時候若不加引號對,那麼它本身就是物件,js可以直接獲取物件本身的屬性和方法;為什麼還要加引號將它變成字串之後再用 「eval();」 或者 「json.parse();」 解析,這樣做不是既不環保又沒有效率嗎?
原因很簡單:前端提供給後台的只能是字串資料格式,後台返回給前台的就看返回的是什麼資料格式,是字串就必須解析之後再用。
(這個小問題一般大家都會忽略掉,不太關注。我之所以好奇的原因也是因為對後台了解的不夠,把這個問題丟擲來希望對後台不熟的朋友有所幫助,知道是怎麼回事後自然而然會加深記憶,在開發過程中就不會漏掉了)
js讀取json資料
示例如下 請問有沒有詳細的js讀取json的例子方法 根據city獲得name function getnamebycity city return cityname city js 中讀取json的方法 js讀取json的方法我接觸到的有兩種 方法一 函式構造定義法返回 var strjson 得...
Js迴圈讀取JSON資料
服務端後台返回到客戶端的json格式字串 var str 我們把它轉換成json物件 var jsonlist eval str 這時候如果以用斷點跟蹤檢視這個jsonlist物件,其實你會發現,他的長度為2,即jsonlist.length 2。它的每一項都是乙個單獨的json物件。請看下圖 這時...
js讀取解析JSON資料
json字串轉換為json物件倆種方式 一 eval 這種方法會執行json物件中的js語句 比較危險 在解析 不明的json物件的時候可能出現危險 var str 字串 var data eval str 二 json.parse 比較安全 不會執行json物件裡的js語句 分別有以下幾種寫法 v...