1. 将 json 字符串 转换为 json 对象
// json 字符串
var str1 = '{ "name": "cxh", "sex": "man" }';
//将 json 字符串转换为 json 对象
//方法1
//var obj = eval('('+str1+')');
//方法2
var obj = JSON.parse(str1);
alert(obj);
var obj = eval('('+str1+')');
//加了括号就不会报错。
eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。
如果s语句执行结果是一个值,
则返回此值,否则返回undefined。
如果想要使用eval这个函数的话,普通的String转换,直接写eval_r(s),即可,
但是如果需要转换的是json对象的话,那么就需要包一层括号,即eval_r("(" + json + ")");
但是还有一种情况就是,如果在执行这个函数之前,调用了JSON.stringify(json)的话,
就会把json转换成了string了,而再利用eval的时候就不需要加那个括号了。否则
回报Unexpected identifier 的错误。
eval的作用其实很简单,就是把一段字符串传递给JS解释器,
由Javascript解释器将这段字符串解释成Javascript代码,并且执行他。语法为 eval_r(string),string 必需。
要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。通过计算 string 得到的值(如果有的话)。
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。
因此请不要为 eval_r() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval_r() 方法赋予另一个属性,并通过该属性调用它,
则 ECMAScript 实现允许抛出一个 EvalError 异常。
如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。如果非法调用 eval_r(),
则抛出 EvalError 异常。如果传递给 eval_r() 的 Javascript 代码生成了一个异常,
eval_r() 将把该异常传递给调用者。
// json 对象
var str2 = {"name":"cxh","sex":"man"};
//将 json 字符串转换为 json 对象
//方法1
//var obj = eval('('+str2+')'); //会报错
var obj = eval(str2);
var obj = JSON.parse(str2);//解析对象会报错
总结:
eval() 可以将 json 字符串,json 对象解析成 json 对象。
解析 json 字符串时,要加上 括号;
而解析 json 字符串时,不能加 括号
JSON.parse() 只接受 json 字符串作为参数
2.将 json 对象转换为 json 字符串
// json 对象
var str2 = {"name":"cxh","sex":"man"};
var str = JSON.stringify(str2);
alert(str);
//alert(JSON);
// json 就是一个字符串
var json = '[{"title":"a","num":"1"},{"title":"b","num":"2"}]';
var box = eval(json);
//var box = JSON.parse(json);
alert(box[0].title);
var box1 = [
{
title:'a',
num:1,
height:177
},
{
title:'b',
num:2,
height:188
}
];
//第一个参数必传
var json = JSON.stringify(box1);
//第二个参数可以是数组或者方法
//过滤掉 title,只显示 num,height
var json = JSON.stringify(box1,['num','height']);
//可以对键值进行处理
var json = JSON.stringify(box1,function(key,value){
if (key=='title') {
return 'Mr.' + value;
} else {
return value;
}
});
//第三个参数用于排版
var json1 = JSON.stringify(box1,null,4);
var json2 = JSON.stringify(box1,['title','num'],4);
var json3 = JSON.stringify(box1,['title','num'],"***");
// 如果 json 对象中有 toJSON()方法,则按方法里面的处理
var box2 = [
{
title:’a’,
num:1,
height:177,
toJSON:function(){
return this.title;
}
},
{
title:’b’,
num:2,
height:188,
toJSON:function(){
return this.title;
}
}
];
http://www.jb51.net/article/43136.htm