码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript – JSON

时间:2015-03-30 22:42:43      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

    一种数据格式,太常用了。

    ES5中定义了一个全局对象JSON,有两个方法:stringify()和parse(),分别用于序列化和解析。

1. JSON的序列化

var person = {
    name: ‘smallSan‘,
    age: 21,
    job: null,
    ‘‘: 123,
    title: window.undef, // 并没有该属性
    sayName: function(){
        console.info(this.name);
    }
};
JSON.stringify(person); //"{"name":"smallSan","age":21,"job":null,"":123}"
    默认情况下,JSON.stringify()输出的JSON串不包含任何空格和缩进,如上。

    在序列化JS对象时,所有的函数及原型成员都会被忽略,值为undefined的熟悉也会被忽略。

    序列化的选项

    JSON.stringify()除了要序列化的JS对象外,还可接受两个参数:过滤器(可以是数组或函数)、缩进的空格数。

    过滤器为数组:结果中只包含数组中列出的属性。

    JSON.stringify(person, [‘name‘, ‘jod‘]); // "{"name":"smallSan"}"

    过滤器为函数:传入的函数接收属性名和值两个参数,属性名只能为串,但可为空串,为了改变序列化对象的结果,函数返回的值就是该属性的值,若函数返回undefined,则对应属性被忽略。

JSON.stringify(person, function (k, v) {
    if (k == ‘age‘)
        return undefined;
    return v;
}); // "{"name":"smallSan","job":null,"":123}"

    缩进的空格数:

    技术分享

    最大缩进空格数为10,大于10会转为10。

    toJSON()方法

    若给对象定义了toJSON()方法,那么JSON.stringify(obj)就会调用obj的toJSON()方法。

var person = {
    name : ‘smallSan‘,
    age : 21,
    job : null,
    ‘‘ : 123,
    title : window.undef, // 并没有该属性
    sayName : function () {
        console.info(this.name);
    },
    toJSON : function () {
        return this.name;
    }
};
JSON.stringify(person); // "smallSan"

2. JSON的解析

    JSON是JavaScript语法的子集,因此可以使用eval()解析。

    鉴于eval()比较危险,一般使用JSON.parse()解析。

    JSON.parse()也可接收与序列化时过滤函数相同的函数(还原函数),该函数返回undefined,表示从结果中删除相应键,否则插入结果中。

   将日期字符串转为日期对象时,还原函数较为常用。

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;
        }
    });
console.info(bookCopy.releaseDate.getFullYear()); // 2011

JavaScript – JSON

标签:

原文地址:http://www.cnblogs.com/sduzhangxin/p/4379241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!