相信大部分人都知道或者去百度檢索都會得到將js中的字符串轉(zhuǎn)化成json對象常見的3種方法
舉例:
var str ?= '{"name":"小明","age":18}';
將字符串轉(zhuǎn)化json對象:
1. ?var json = JSON.parse(str);
2. ?var json = eval("(" + str + ")");
3. ?var json = (new Function("return " + str))();
通過console.log()將json打印到控制臺疼阔,不管是使用以上3種哪一種方法,都能在chrome控制臺看到成功轉(zhuǎn)化的結(jié)果:
但是如果使用JSON.parse()方法來轉(zhuǎn)化json對象谱仪,需要注意的坑點是什么?
1.字符串的數(shù)據(jù)格式
以上舉例 str? = '{"name":"小明","age":18}'; 屬性name和age都用雙引號引住嗦随,
有的人可能會習(xí)慣寫成對象形式的字符串,如:str = '{name:"小明",age:18}';
結(jié)果使用JSON.parse()來轉(zhuǎn)化會報錯贴浙,因為使用JSON.parse需嚴格遵守JSON規(guī)范署恍。
2.單引號與雙引號
我們看到一開始的舉例中 var str? = '{"name":"小明","age":18}'; 使用單引號來套雙引號袁串,如果反過來寫呢呼巷,如:var str = "{'name':'小明', 'age':18}";(相信也不少人習(xí)慣用雙引號套單引號)
結(jié)果使用JSON.parse()來轉(zhuǎn)化也會報錯
最后總結(jié)來說王悍,如果使用JSON.parse()方法來轉(zhuǎn)化成json對象的數(shù)據(jù)格式的話,需要注意的是被轉(zhuǎn)化的字符串里面的屬性要使用引號鲜漩,并且總體是單引號套雙引號的方式。
當然孕似,如果你使用eval()或者new Function()的方式來轉(zhuǎn)化鳞青,那就完全可以忽略上述的這兩點需要注意的地方~( ̄▽ ̄~)(~ ̄▽ ̄)~哈哈
附:
eval() 函數(shù)可將字符串轉(zhuǎn)換為代碼執(zhí)行,并返回一個或多個值
eval調(diào)用時厚脉,實例為eval( "( javascript代碼 )" )
var str = "function(){alert('a');}“;
str = eval("("+str+")");
str();
eval()的返回值
eval()的返回值遵循以下規(guī)則:
1.如果eval()的參數(shù)不是字符串胶惰,那么eval()將直接返回參數(shù)。
?2.如果eval()的參數(shù)是字符串中捆,那么eval()將這個字符串解析成代碼后進行執(zhí)行坊饶,并返回最后一行代碼執(zhí)行的結(jié)果。
?3.如果字符串無法解析成合法的代碼蟋滴,eval()將拋出SyntaxError錯誤痘绎。