什么是JSON?
在我们写项目的时候,客户端向服务器发送请求,之后,服务器会给客户端响应需要的数据。
服务器可以给客户端响应一种 JSON 的数据格式。
JSON(JavaScript Object Notation)是一种对象描述符,是一种基于文本的数据交换格式。可以被任何语言读取或者作为数据格式来传递。
在前端开发中,可以使用 JSON 进行客户端与服务器之间通信。是目前最常用的数据格式。
JSON 支持的数据类型有哪些?
JSON并不是JS对象。JSON是与js对象有区别的!!!
JSON 的语法是基于js的,但JSON与JS对象并不是一回事。
JSON 中的对象格式更加严格。
JSON 支持的数据类型有:Number、string、Boolean、Objest、Array、null。
JSON 中属性值不支持Function、NaN、underfine形式。
JSON 中的数据必须由逗号隔开,对象中的键必须由“”包起来。
JSON 中没有注释。
所以大多数JS对象的语法是不符合JSON对象的格式的。
JS 数据结构与 JSON 格式之间的转换!
js 中提供了 JSON.stringify() 和 JSON.parse() 这两个函数,来实现 js 数据结构和 JSON 格式的转换处理。
JSON.stringify()
在前端向后端发sing数据时,调用 JSON.stringify() 可以将一种数据结构转换成一个 JSON 字符串。就算传入的数据格式不符合JSON格式,在进行序列化的时候会对这些数据进行特殊处理使其规范化。
什么是序列化?
项目中如果需要将一个对象存储到硬盘上,那么怎么进行存储呢?
我们在运行一个程序的时候,对象是存储在内存中的,当程序运行结束或者断电之后,内存上的数据就没有了,所以我们可以通过 window.localStorage(key,Value) 将一个js 对象存储到硬盘上。
那么,问题来了。在我们尝试把JS对象存储到local Storage中时,local Storage中只能存储字符串,所以传入的obj会调用toString方法转成字符串,最终会转换成 '[object object]',这个结果并不是我们想要的。
let obj={name:'az'}
console.log(obj); // {name: 'az'}
window.localStorage.setItem("obj",obj)
所以,此时我们需要把obj对象转化层JSON 串之后,在进行存储,这个过程就叫做序列化。
let obj={name:'az'}
let objstr=JSON.stringify(obj);
console.log(objstr); // {"name":"az"}
console.log(typeof objstr); // string
window.localStorage.setItem("obj",objstr)
运行结果如下:
这样我们就成功的将对象存储到了硬盘上了。
JSON.parse()
在后端在就收到JSON格式之后,通过 JSON.parse() 可以实现将JSON格式的字符串转换成一个js数据类型。若传入的不是JSON格式的数据,就会报错。
什么是反序列化?
前面了解了什么是序列化,那么反序列化就好理解了!
反序列化 就是通过JSON.parse() 把JSON串还原成JS对象
let obj = {name:'az'}
let objstr=JSON.stringify(obj);
window.localStorage.setItem("obj",objstr)
let str=window.localStorage.getItem("obj",objstr);
console.log(str); // {"name":"az"}
console.log(typeof str); // string
let obj1=JSON.parse(str);
console.log(obj1); // 对象
输出结果如下:
利用JSON 实现深拷贝
let obj = { name: 'az' }
let objstr = JSON.stringify(obj);
let newobj=JSON.parse(objstr);
obj.name="asdf";
console.log(newobj.name); // az
console.log(obj.name); // asdf