JSON相关(一):JSON.parse()和JSON.stringify()
2013-09-30 21:32
344 查看
parse用于从一个字符串中解析出json对象,如
var str = '{"name":"huangxiaojian","age":"23"}'
结果:
JSON.parse(str)
Object
age: "23"
name: "huangxiaojian"
__proto__: Object
注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。
stringify()用于从一个对象解析出字符串,如
var
a = {a:1,b:2}
结果:
JSON.stringify(a)
"{"a":1,"b":2}"
说到json.parse()就不得不说到eval()。两个都是json的解析方法。使用方法如下:
既然两者都能达到解析json的结果,但这两者有什么区别呢?我用以下的一个例子来进行说明:
1. 用eval方法:
执行结果:
2. 用JSON.parse方法
执行结果:
不能顺利执行,报错
前者能顺利执行,并修改了全局变量value的值,而后者报错了。从上例就可以明显地看出,eval在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的),如上例中,由于用eval解析一个json字符串而造成原先的value的值改变。《高性能Javascript》一书即指出:
警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。
var str = '{"name":"huangxiaojian","age":"23"}'
结果:
JSON.parse(str)
Object
age: "23"
name: "huangxiaojian"
__proto__: Object
注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。
stringify()用于从一个对象解析出字符串,如
var
a = {a:1,b:2}
结果:
JSON.stringify(a)
"{"a":1,"b":2}"
说到json.parse()就不得不说到eval()。两个都是json的解析方法。使用方法如下:
var jsonstr = '{"name":"jifeng","company":"taobao"}'; //eval function var evalJson = eval('(' + jsonstr + ')'); // JSON.parse function var JSONParseJson = JSON.parse(jsonstr);
既然两者都能达到解析json的结果,但这两者有什么区别呢?我用以下的一个例子来进行说明:
1. 用eval方法:
var parse_json_by_eval = function(str){ return eval('('+str+')'); } var value = 1; var jsonstr = '{"name":"jifeng","company":"taobao","value":++value}'; var json1 = parse_json_by_eval(jsonstr); console.log(json1); console.log('value: '+ value);
执行结果:
{ name: 'jifeng', company: 'taobao', value: 2 } value: 2
2. 用JSON.parse方法
var parse_json_by_JSON_parse = function(str){ return JSON.parse(str); } value = 1; var jsonstr = '{"name":"jifeng","company":"taobao","value":++value}'; var json2 = parse_json_by_JSON_parse(jsonstr); console.log(json2); console.log(value);
执行结果:
不能顺利执行,报错
前者能顺利执行,并修改了全局变量value的值,而后者报错了。从上例就可以明显地看出,eval在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的),如上例中,由于用eval解析一个json字符串而造成原先的value的值改变。《高性能Javascript》一书即指出:
警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。
相关文章推荐
- JSON相关的学习笔记,json的表示方法,eval(),parse(),stringify()方法的使用
- JSON.parse()和JSON.stringify()区别
- JSON.parse()和JSON.stringify()
- JSON.parse()和JSON.stringify() object和字符解析
- JSON.stringify(),JSON.parse(),toJSON()
- JSON.parse()和JSON.stringify()
- JSON.parse()和JSON.stringify()
- JSON之—— JSON.parse()和JSON.stringify() (插曲)
- JSON.parse()和JSON.stringify()
- JSON.parse()和JSON.stringify()
- JSON.parse()和JSON.stringify()
- JSON.parse()和JSON.stringify()
- Json.parse()和Json.stringify()
- JSON.parse()与JSON.stringify()
- javascript 对象与字符串相互转换函数 JSON.stringify 和 JSON.parse 的使用
- JSON.parse()和JSON.stringify()
- JSON.stringify() 和 JSON.parse()
- JSON.parse()和JSON.stringify()
- JSON中parse和stringify的应用
- JSON.parse()和JSON.stringify()