JSON的全称是JavaScript Object Notation,notation的意思有数字符号、音乐符号的意思。特定的符号就表明特定的意思,人们看到符号之后就能够知道它传达的意思。我把它理解为js对象符号。而对象符号的唯一目的就是结构化数据。
JSON是一种通用的数据格式,不是一种编程语言,JSON不属于JavaScript,JSON中没有变量、函数。JSON的出现使得跨平台传输数据更为方便,数据使用更加直接。
JSON用法
JSON可以表示字符串、数值、布尔值、null
- 字符串用法:需要注意的是JSON表示的字符串必须使用双引号包围起来
"Hello,Penrose!"
JSON可以表示对象
- 语法:JSON表示的对象的属性必须用双引号包围起来,属性和值以键值对的形式表示,每一组键值对用逗号隔开。
{"name":"Penrose","age":22,"sex":"male","hobby":["跑步","健身"]}
JSON可以表示数组
- 语法:数组中可以存放任意类型的数据。数组元素之间用逗号隔开,最后一个数组元素不用加逗号。数组和对象可以结合使用,表示复杂的数据类型。
[{"name":"Penrose","age":22,"sex":"male","hobby":["跑步","健身"]},{"name":"Rose","age":25,"sex":"male","hobby":["打篮球","旅行"]}]
JSON的序列化和解析
JSON是一个全局对象,是很多主流浏览器都支持的内置对象,JSON身上有两个方法,JSON.stringify()
和JSON.parse()
JSON.stringify()
- 用法:将JavaScript对象或值转化为JSON字符串
- 延伸:序列化就是将内存中的某个对象转化为可以传输的字节序列,而序列化的就是为 了跨平台和网络传输
- JSON.stringify()会输出不包含空格或缩进的字符串
JSON.parse()
- 用法:将JSON解析为原生JavaScript值
Tips:JavaScript对象经过序列化后转化为JSON字符串,如果再将该JSON字符串解析为原生JavaScript对象,则初始对象和解析后的对象是两个完全不同的对象。
代码示例
//将js字符串转化为JSON字符串
let str = 'Hello,Penrose!';
let newStr = JSON.stringify(str);
console.log(newStr);//"Hello,Penrose!"
//将js表示的数组转化为JSON字符串
let arr = [
{
name: "Penrose",
age: 22,
sex: "male",
hobby: ["跑步", "健身"],
},
{
name: "Rose",
age: 25,
sex: "male",
hobby: ["打篮球", "旅行"],
},
];
let str = JSON.stringify(arr);
console.log(str);//[{"name":"Penrose","age":22,"sex":"male","hobby":["跑步","健身"]},{"name":"Rose","age":25,"sex":"male","hobby":["打篮球","旅行"]}]
//将JSON字符串解析为JavaScript对象
let newArr = JSON.parse(str);
console.log(newArr);//打印输出解析后的对象
//验证初始对象和解析后的对象是否相同
console.log(arr === newArr);//false
//将js对象转化为JSON字符串
let obj = {
name: "Penrose",
age: 22,
sex: "male",
hobby: ["跑步", "健身"],
};
let str = JSON.stringify(obj);
console.log(str);//{"name":"Penrose","age":22,"sex":"male","hobby":["跑步","健身"]}
let newObj = JSON.parse(str);
console.log(obj);//{name: 'Penrose', age: 22, sex: 'male', hobby: Array(2)}
//验证初始对象和解析后的对象是否相同
console.log(obj === newObj);//false