43. Json

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

http://www.cnblogs.com/ningvsban/p/3660654.html

http://blog.sina.com.cn/s/blog_944bf8ef0101isnp.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值