JSON对象

一、JSON定义

        JSON指JavaScript 对象表示法(JavaScript Object Notation),它是一种轻量级的数据交换格式。

        JSON 值可以是:

  1. 数字(整数或浮点数)
  2. 字符串(在双引号中
  3. 逻辑值(true 或 false)
  4. 数组(在方括号中)
  5. 对象(在花括号中)
  6. null

        其中,1、2、3、6是简单值,5、6是复杂数据类型。对象表示的是一组无需的键值对儿,数组表示一组有序的值的列表。除以上6种外,再无其他,没有像js一样的undefined、NAN,JSON拒绝使用。

二、对象

    JSON中的对象与JS字面量有些不同,JS对象字面量:

var person = {
    name : "Nicholas",
    age : 29
};

    JSON表示上述对象的方式如下:

{
    "name" : "Nichloas",
    "age" : 29
}

    不同:1、没有生命变量(JSON中没有变量的概念);2、没有末尾的分号。

三、数组

    可以通过数值索引来访问其中的值。

    JS中的数组字面量:

var values = [25, "hi" , true];

    JSON表示:

[25, "hi", true]

四、JSON对象

    JavaScript的eval()函数可以用来解析JSON并返回JavaScript对象,不过eval()对JSON结构求值是存在风险的.因此,在ECMAScript5中新增了全局的JSON对象.JSON对象有两个方法:stringify()和parse().

    stringify()用于把JavaScript对象序列化为JSON字符串;

    parse()用于把JSON字符串解析为原生的JavaScript值.

五、序列化选项

    JSON.stringify()方法有三个参数:

    第一个参数是要序列化的JavaScript对象;

    第二个参数是过滤器,可以是一个数组或者函数;如果过滤器是函数,传入的函数有两个参数:属性名和属性值.根据属性名来判断如何处理序列化对象中相应的属性.如果函数返回了undefined,那么相应的属性就会被忽略.

    第三个参数是一个布尔值,表示是否在JSON字符串中保留缩进.如果缩进参数传入的是数值,表示每个json字段缩进的空格数,但是最大缩进空格数不超过10.

//过滤结果
var book={
    "title":"Professional JavaScript",
    "authors":["Nicholas C.Zakas"],
    edition:3;
    year:2011
};
var jsonText=JSON.stringify(book,["title","edition"]);//第二个参数是数组
var jsonText=JSON.stringify(book,function(key,value){//第二个参数是函数
    switch(key){ 
        case "authors":
            return value.join(",")
        cae "year":
            return 5000;
        case "edition"
            return undefined;
        default:
            return value;
    }
});

//字符串缩进
var jsonText=JSON.stringify(book,null,4);
var jsonText=JSON.stringify(book,null,"--");

    如果JSON.stringify()不能满足某些对象的序列化需求,可以给对象自定义toJSON方法,返回其自身的JSON数据格式。

//toJSON()方法
var book={
    "title":"Professional JavaScript",
    "authors":["Nicholas C.Zakas"],
    edition:3;
    year:2011,
        toJSON:function(){ 
            return this.title;
        }
};
var jsonText=JSON.stringify(book);
//通过对象上调用toJSON()方法,返回其自身的JSON数据格式

    综合以上几种情况,JSON.stringify()序列化对象的顺序如下:

    ①如果对象存在toJSON方法且能返回有效值,则调用该方法;否则,仍然按照默认顺序执行序列化。

    ②如果stringify()存在第二个参数,应用这个过滤器;

    ③对第②步返回的每个值进行序列化;

    ④如果存在第三个参数,执行相应的格式化。

六、解析选项

    JSON.parse()用来将JSON字符串解析成JavaScript对象。

    该方法第一个参数要解析的JSON字符串;

    第二个参数是一个函数还原函数。还原函数有两个参数key和value。如果还原函数返回undefined,则表示将该属性从结果中删除;如果返回其它值,则将该值插入到结果当中。在将日期字符串转换为Date对象时,经常用到还原函数.

JSON.parse()方法可以接受一个函数参数:
var book{
        "title":"Professional JavaScript",
        "authors":["Nicholas C.Zakas"],
        edition:3;
        year:2011,
        releaseDate:new Date(2011,11,1)
    };
    var jsonText=JSON.stringify(book);
    var bookCopy=JSON.parse(jsonText,function(key,value){ 
        if(key=="releaseDate"){ 
            return new Date(value),
        }else{ 
            return value;
        }
    });
    alert(bookCopy.releaseDate.getFullYear());

问题1:

JSON取值方括号和点的区别

问题2:

stringify和parse的深浅拷贝

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值