js中eval()和$.parse()的区别以及JSON.stringify()
2018-02-05 13:55
771 查看
1. JSON.parse(jsonString)和eval(jsonString): 在一个字符串中解析出JSON对象
var str = '[{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","activeClass":"haha"}]'; JSON.parse(str);
结果:
区别一:安全性
JSON.parse()可以解析json格式的数据,并且会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,
而eval()则可以解析任何字符串,eval是不安全的.
在这里“json格式的字符串”是指要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双引号、字符串值也必须用双引号。
如果传入一个格式不"完好"的JSON字符串将抛出一个JS异常
json的解析方法共有两种:eval 和 JSON.parse(),如:
[javascript] view
plain copy
var jsonStr= '{"name":"lulu", "sex":"female"}';
var evalJson=eval('('+jsonStr+')');
var jsonParseJson=JSON.parse(jsonStr);
这样就把json格式的字符串jsonStr转换成了JSON对象。
但是区别是:
[javascript] view
plain copy
var age = 27;
var jsonStr= '{"name":"lulu", "sex":"female","age":++age}';
var evalJson=eval('('+jsonStr+')'); //不报错此时age的值是28
var jsonParseJson=JSON.parse(jsonStr);//报错
注意:某些低级的浏览器尚不支持JSON.parse()
《高性能Javascript》一书即指出:警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。
2. JSON.stringify(obj) : 将一个JSON对象转换成字符串
var obj = [{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","activeClass":"haha"}]; JSON.stringify(obj);
结果:
"[{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","activeClass":"haha"}]"
json 字符串和对象的相互转换
var str = '[{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","activeClass":"haha"}]'; JSON.parse(str);
结果:
区别一:安全性
JSON.parse()可以解析json格式的数据,并且会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,
而eval()则可以解析任何字符串,eval是不安全的.
区别二:格式严格性
JSON.parse()解析的必须是json格式的字符串要不报错,而eval()则没有这么严格
在这里“json格式的字符串”是指要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双引号、字符串值也必须用双引号。如果传入一个格式不"完好"的JSON字符串将抛出一个JS异常
json的解析方法共有两种:eval 和 JSON.parse(),如:
[javascript] view
plain copy
var jsonStr= '{"name":"lulu", "sex":"female"}';
var evalJson=eval('('+jsonStr+')');
var jsonParseJson=JSON.parse(jsonStr);
这样就把json格式的字符串jsonStr转换成了JSON对象。
但是区别是:
[javascript] view
plain copy
var age = 27;
var jsonStr= '{"name":"lulu", "sex":"female","age":++age}';
var evalJson=eval('('+jsonStr+')'); //不报错此时age的值是28
var jsonParseJson=JSON.parse(jsonStr);//报错
注意:某些低级的浏览器尚不支持JSON.parse()
《高性能Javascript》一书即指出:警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。
2. JSON.stringify(obj) : 将一个JSON对象转换成字符串
var obj = [{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","activeClass":"haha"}]; JSON.stringify(obj);
结果:
"[{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","activeClass":"haha"}]"
json 字符串和对象的相互转换
JSON.parse( ) 字符串转化为对象 JSON.stringify( ) 对象转还未字符串
相关文章推荐
- js中eval()和$.parseJSON()的区别和联系以及JSON.stringify()
- JS 中json解析和构造详解eval、JSON.stringify、JSON.parse
- js数组使用JSON.stringify()和toString()的区别,JSON.parse
- js调用ajax以及JSON.parse()与JSON.stringify()的使用
- JSON.stringify()、,JSON.eval(),JSON.parse()各自的区别于作用
- js中json操作——函数构造法、eval、JSON.stringify、JSON.parse
- js中json操作——函数构造法、eval、JSON.stringify、JSON.parse
- Js中JSON.stringify()与JSON.parse()与eval()详解及使用案例
- JSON.parse() 方法与$.parseJSON()以及JSON.stringify()区别
- js中json操作——函数构造法、eval、JSON.stringify、JSON.parse
- Js中JSON.stringify()、JSON.parse()、eval()详解
- textarea标签赋值、jsonp对象转string、ajax跨域访问以及JSON.stringify() 和JSON.parse()区别
- JSON.parse() 方法与$.parseJSON()以及JSON.stringify()区别
- JSON中 key 动态设置 以及JSON.parse 和JSON.stringify()的区别
- js中json操作——函数构造法、eval、JSON.stringify、JSON.parse
- JSON.parse()和JSON.stringify() 的用法区别
- JSON.parse和eval的区别
- JSON.parse和eval的区别
- JSON.parse()与JSON.stringify()的区别
- eval()和JSON.parse()的区别