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(),如:
但是区别是:
注意:某些低级的浏览器尚不支持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 字符串和对象的相互转换