JSON是JavaScript Object Notation的缩写,翻译为JavaScript对象符号。和JavaScript不同,JSON不是一种编程语言,而是存储数据的一种格式,被广泛用于前后端数据传递、项目配置文件中
1. JSON数据类型
.json
结尾的文件顶层可以存储三大类的数据
- 基本类型
字符串、数字、布尔类型、null(不能存undefined) - 数组类型
// a.json
[
"name1",
"name2",
]
- 对象类型
// b.json
{
"name": "xs"
}
2. JSON类型与JavaScript类型转换
JSON.stringify()
将JavaScript类型变为JSON字符串
可以序列化JS对象数组和基本类型,转化为JSON类型的字符串(区分JS类型的字符串)
注意:在序列化对象时,对象的方法会被忽视JSON.parse()
解析JSON类型的字符串,转换为JavaScript类型
3 JSON.stringify方法
JSON.stringify( value, repalcer?, space?)
- 第二个参数replacer使用
为数组时:指的是要序列化的元素
为函数时:为监听序列化的回调函数
const obj = {
name: "xs",
age: 18,
friends: ["aaa", "bbb"],
};
// 1为数组,元素为要系列化键值对的key
const objString1 = JSON.stringify(obj, ["name", "friends"]);
console.log(objString1); // {"name":"xs","friends":["aaa","bbb"]}
// 2为函数,监听序列化过程
const objString2 = JSON.stringify(obj, (key, value) => {
if (key === "age") {
return value + 1;
}
return value;
});
console.log(objString2); // {"name":"xs","age":19,"friends":["aaa","bbb"]}
- 第三个参数space使用
为数字时:指的是缩进的空格数
为字符串时:指的是缩进用该字符串占位
const objString3 = JSON.stringify(obj, null, 2);
console.log(objString3);
// 输出结果有缩进2个空格
{
"name": "xs",
"age": 18,
"friends": [
"aaa",
"bbb"
]
}
4 JSON.parse方法
JSON.parse(value, reviver)
reviver指的是解析时的回调函数
const info = JSON.parse(objString1, (key, value) => {
if (key === "age") {
return value + 10;
}
return value;
});
console.log(info); // { name: 'xs', age: 28, friends: [ 'aaa', 'bbb' ] }