JavaScript基础——JSON

本文介绍了JSON数据格式的基本概念,包括其轻量级特性、语法规范以及如何使用JavaScript进行数据的序列化与解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工程量。

JSON使用JavaScript语法的子集表示对象、数组、字符串、数组、布尔值和null。

即使XML也能表示同样复杂的数据结果,但JSON没有那么繁琐,而且在JavaScript中使用更便利。

ECMAScript5定义了一个原生的JSON对象,可以用来将对象序列化微JSON字符串或者将JSON数据解析为JavaScript对象。JSON.stringify()和JSON.parse()方法分别用来实现上述两项功能。这两个方法都有一些选项,通过它们可以改变过滤的方式,或者改变序列化的过程。

原生的JSON对象也得到了很多浏览器的支持,比如IE8+、Firefox3.5+、Safari4+、Opera10.5和Chrome.

/**
 * JSON
 */
function cl(x){
    console.log(x);
}
/**
 * 20.1 语法
 */
//20.1.1 简单值
//JSON字符串与JavaScript字符串的最大区别是:
// JSON字符串必须使用双引号

//20.1.2 对象
//JSON没有声明变量,对象的属性必须加双引号
/*
{
    "name":"Jason",
    "age":26,
    "school":{
        "name":"FuDan College",
        "location":"ShangHai,China"
    }
}
    */

//20.1.3 数组
/*
[{
    "name":"Jason",
    "age":26,
    "school":{"name":"FuDan College", "location":"ShangHai,China"}
}, {
    "name":"Alex",
        "age":23,
        "school":{"name":"FuDan College", "location":"ShangHai,China"}
    }
]
    */

/**
 * 20.2 解析与序列化
 */
//20.2.1 JSON对象
//JSON对象有两个方法:stringify()和parse()
var book={
    title:"JavaScript book",
    authors:["Jason Zhou"],
    edition:3,
    year:2013
};
//将JavaScript对象序列化为JSON字符串
var jsonText1=JSON.stringify(book);
cl(jsonText1);//=>{"title":"JavaScript book","authors":["Jason Zhou"],"edition":3,"year":2013}
//将JSON字符串解析为原生JavaScript值
var bookCopy=JSON.parse(jsonText1);
cl(bookCopy);//=>Object {title: "JavaScript book", authors: Array[1], edition: 3, year: 2013}

//20.2.2 序列化选项
//20.2.2.1 过滤结果
var jsonText2=JSON.stringify(book,["title","edition"]);
cl(jsonText2);//=>{"title":"JavaScript book","edition":3}
var jsonText3=JSON.stringify(book,function(key,value){
    switch (key){
        case "authors":
            return value.join(",");
        case "year":
            return 5000;
        case "edition":
            return undefined;
        default :
            return value;
    }
});
cl(jsonText3);//=>{"title":"JavaScript book","authors":"Jason Zhou","year":5000}
//20.2.2.2 字符串缩进
var jsonText4=JSON.stringify(book,null,4);
cl(jsonText4);//=>
 /*
 {
    "title": "JavaScript book",
    "authors": [
        "Jason Zhou"
    ],
    "edition": 3,
    "year": 2013
 }
*/
var jsonText5=JSON.stringify(book,null,"--");
cl(jsonText5);//=>
/*
 {
 --"title": "JavaScript book",
 --"authors": [
 ----"Jason Zhou"
 --],
 --"edition": 3,
 --"year": 2013
 }
 */
//20.2.2.3 toJSON()方法
//可以为任何对象添加toJSON()方法
var newBook={
    title:"JavaScript book",
    authors:["Jason Zhou"],
    edition:3,
    year:2013,
    toJSON:function(){
        return this.title;
    }
};
var jsonText6=JSON.stringify(newBook);
cl(jsonText6);//=>"JavaScript book"
//另外要注意序列化对象的执行顺序:toJSON->过滤器->序列化->格式化

//20.2.3 解析选项
var newBook2={
    title:"JavaScript book",
    authors:["Jason Zhou"],
    edition:3,
    year:2013,
    releaseDate:new Date(2013,11,22)
};
var jsonText7=JSON.stringify(newBook2);
var newBook2Copy=JSON.parse(jsonText7,function(key,value){
    if(key=="releaseDate"){
        return new Date(value);
    }else{
        return value;
    }
});
cl(newBook2Copy.releaseDate.getFullYear()); //=>2013



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值