JSON
JSON是什么
- JSON [ JavaScript Object Notation ] 叫做
JavaScript对象表示法
。 - JSON 是轻量级的
文本数据交换格式
。
JSON用途
- 用于结构化数据的交换。
JSON特点
- JSON
独立于语言
:JSON 虽然使用 Javascript语法 ( 利用了JavaScript中的一些模式来表示结构化数据
。) 来描述数据对象,但是 JSON 仍然独立于语言和平台。
JSON语法(可以表示的数据类型)
- “名称/值”对的集合。JavaScript中被理解为
对象
(object)。
- 值的有序列表。在大部分语言中被理解为
数组
(array)。
简单值
:不支持undefined,字符串(属性名)必须用双引号
。
示例
- 对象:没有声明变量,对象属性必须加双引号。
//JavaScript
var object = {
name:"Nichlas",
age = 29
} //在JavaScript中属性名也可以加双引号。
//JSON
{
"name":"Nichlas",
"age":29
}
- 数组没有变量也没有分号。
[
{
"title":"dog",
"author":[
"Nicholas",
"vat",
"hello"
],
"name":"candy"
},
{
...
}
]
2.方法
ES5定义了全局对象JSON。
- JSON.stringify() ->
JavaScript对象序列化为JSON字符串
- 默认情况下JSON.stringify()输出的JSON字符串不包含任何空格或缩进。
- 所有函数,原型成员,值为undefined的属性都会被跳过。
- 可以接收两个参数:
- 第1个参数是待序列化对象
- 第2个参数是过滤器,可以是数组,也可以是函数
- 第3个参数是一个选项,是否保留缩进
//如果第2个参数是数组,那么结果只包含数组中列出的属性
var book = {
"title":"test",
"author":"one",
edition:3,
year:2018
}
var jsonText = JSON.stringify(book,["title","edition"]);
// {"title:"test","edition",3}
//如果第2个参数是函数,传入的函数接收两个参数:属性名和属性值。
//如果函数返回undefined,相应的属性会被忽略。
var book = {
"title":"test",
"authors":"fog",
edition:3,
year:2019
};
var jsonText = JSON.stringify(book,function(key,value){
switch(key){
case "author":
return value.join(",")
case "year":
return 5000;
case "edition":
return undefined;
default:
return value;
}
});
//{"title":"test","author":"fog","year":5000}
//第三个参数如果是一个值,表示每个级别缩进的空格数[1-10]
//如果是字符串,可以将缩进字符设置为任意字符
JSON.stringify(book,null,4);
- toJSON() -> 自定义JSON对象
var book = {
"title":"test",
"authors":"fog",
edition:3,
year:2019,
toJSON: function{
return this.title;
}
};
var jsonText = JSON.stringify(book);
//可以让toJSON返回任何值。返回undefined时,如果包含它的对象嵌入在另一个对象里,会返回null。如果它是顶级对象,结果就是undefined。
假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下:
- 如果存在toJSON方法,而且能通过它取得有效值,则调用该方法。否则,返回对象本身。
- 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第一步返回的值。
- 对第二步返回的每个值进行相应的序列化。
- 如果提供了第三个参数,执行相应的序列化。
- JSON.parse() -> JSON字符串转换为JavaScript对象
- 可以接收两个参数:
- 第一个是还原的对象
- 第二个是还原函数:同样接收一个键值对,如果还原函数返回undefined,则表示从结果中 删除 相应的键;如果返回其他值,则将该值插入到结果中。
var book = {
"title":"test",
"authors":"fog",
edition:3,
year:2019,
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;
}
});
通过还原函数将JSON字符串还原成Date对象