json数据解析重要的一点

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

posted @ 2016-06-29 12:03  FallenLunatic  阅读(191)  评论(0编辑  收藏  举报