js中eval()和$.parse()的区别以及JSON.stringify()

本文详细介绍了JSON数据格式的转换方法,包括如何使用JSON.parse()和eval()将JSON字符串转换为对象,以及它们之间的区别。此外,还介绍了如何利用JSON.stringify()方法将JSON对象转换为字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.parse()解析的必须是json格式的字符串要不报错,而eval()则没有这么严格

   在这里“json格式的字符串”是指要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双引号、字符串值也必须用双引号。
   如果传入一个格式不"完好"的JSON字符串将抛出一个JS异常

    json的解析方法共有两种:eval 和 JSON.parse(),如:
   

[javascript]  view plain  copy
  1. var jsonStr= '{"name":"lulu", "sex":"female"}';  
  2. var evalJson=eval('('+jsonStr+')');  
  3. var jsonParseJson=JSON.parse(jsonStr);  
这样就把json格式的字符串jsonStr转换成了JSON对象。

但是区别是:

[javascript]  view plain  copy
  1. var age = 27;  
  2. var jsonStr= '{"name":"lulu", "sex":"female","age":++age}';  
  3. var evalJson=eval('('+jsonStr+')'); //不报错此时age的值是28  
  4. 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( ) 对象转还未字符串




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值