json数据解析的特别重视的一点!

原创 lcy 随笔 js 1051阅读 2016-06-29 11:45:40 举报

今天在讨论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

评论 ( 1 )
最新评论
supperdsj 2016-06-29 15:01:52 1F

eval以前好真没想到,学习了