标签:
今天在讨论json数据时,又学到了一点。因为平时都忽略了。所以打个笔记记下来:
json的解析方法共有兩種:1. eval() ; 2.JSON.parse()。
//第一种eval的使用
var evalJson = eval(‘(‘ + jsonstr + ‘)‘);
// 第二种JSON.parse
var JSONParseJson = JSON.parse(jsonstr);
重点!!!两者的区别:
var parse_json_by_eval = function(str) {
return eval(‘(‘ + str + ‘)‘);
}
var parse_json_by_JSON_parse = function(str) {
return JSON.parse(str);
}
var value = 1;
var jsonstr = ‘{"id":"1","name":"root","value":++value}‘;
var json1 = parse_json_by_eval(jsonstr);
console.log(json1);
console.log(‘value: ‘ + value);
執行結果: { name: ‘jifeng‘, company: ‘taobao‘, value: 2 } value: 2
var json2 = parse_json_by_JSON_parse(jsonstr);
console.log(json2);
console.log(‘第二种的value: ‘ + value);
執行結果:报错不能执行
eval 會執行該字符串中的代碼(後果是相當惡劣的,不安全!)
警告:關於JSON和eval需要注意的是:在代碼中使用eval是很危險的,特別是用它執行第三方的JSON數據(其中可能包含惡意代碼)時,盡可能使用JSON.parse()方法解析字符串本身。該方法可以捕捉JSON中的語法錯誤,並允許你傳入一個函數,用來過滤或轉換解析結果。如果此方法以備Firfox 3.5 、IE8 及 Safari 4 原生支持。大多數javascript類庫包含的JSON解析代碼會直接調用原生版本,如果沒有原生支持的話,會調用一個略微不那麼強大的非原生版本來處理。
‘\‘ 对JSON的影响 :
由于String数据类型包含转意字符,比如 ‘\n‘表示換行,而JSON.parse()又是對字符串的真實含義進行解析,要表示 \ 必須要用"\\\\"表示
(JSON.parse(‘{"a":"a\\b"}‘))这样a\\b 也是可以的
原文链接:http://literary-fly.iteye.com/blog/1343268
标签:
原文地址:http://www.cnblogs.com/patriot/p/5626397.html