JavaScript 对象与 JSON 对象的相互转换

一、全局JSON对象

ES5定义了全局对象JSON,对解析JSON的行为制定了规范。
JSON对象有两个方法:stringify() 和 parse()。

二、JavaScript 对象序列化为 JSON对象

JSON.stringify( js对象 [, 过滤器] [, 选项])
二三参数可选,js对象中的函数和原型成员将被忽略,值为undefined的属性也被跳过。
默认情况下,返回的JSON不包含任何空格字符和缩进。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011
           };

var jsonText = JSON.stringify(book);

过滤器为数组:JSON.stingify() 的结果只包含数组中列出的属性。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011
           };

var jsonText = JSON.stringify(book, ["title", "edition"]);
jsonText的值为 {"title": "Professional JavaScript", "edition": 3}

过滤器为函数:函数接收两个参数,键名和值(key, value)。函数体中根据键名处理对应的值。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011
           };

var jsonText = JSON.stringify(book, function(key, value){
    switch(key){
        case "authors":
            return value.join(",")        
        case "year":
             return 5000;           
        case "edition":
             return undefined;
        default:
             return value;
    }
});
序列化后的 jsonText 值为:{"title": "Professional JavaScript", "authors": "Nicholas C. Zakas", "year": 5000}

第三个参数用于控制结果的缩进:
参数为数值 ----- 表示缩进的空格数。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011
           };

var jsonText = JSON.stringify(book, null, 4);
jsonText 中的字符串:
{
    "title": "Professional JavaScript",
    "authors": [
        "Nicholas C. Zakas"
    ],
    "edition": 3,
    "year": 2011
}

参数为字符串 ----- 表示使用该字符串进行缩进。
var book = {
            title: "Professional JavaScript",
            authors: ["Nicholas C. Zakas"],
            edition: 3,
            year: 2011
           };

var jsonText = JSON.stringify(book, null, " - -");
jsonText 中的字符串:
{
--"title": "Professional JavaScript",
--"authors": [
----"Nicholas C. Zakas"
--],
--"edition": 3,
--"year": 2011
}

(还可以为对象定义 toJSON() 方法,实现对其进行自定义序列化的需求。)


三、JSON对象解析为 JavaScript 对象

JSON.parse(json对象 [, 还原函数])
还原参数接收两个参数,键和值。如果返回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;
    }
});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值