JS序列化与反序列化

序列化

将JSON对象转化为字符串

var str = JSON.stringify(obj)  //将JSON对象转化为JSON字符

反序列化

将字符串转化为JSON对象

var obj = JSON.prase(data) //将JSON字符串转换为JSON对象

使用场景

  1. 向后台传递参数、接收后台返回值
    如果后台返回的是一个String(Object序列化后返回),那么需要在js中使用 eval或者parse等转化为Object再使用;如果返回时传递了类型,比如就是Object,那么直接使用就好
  2. 在页面间传递数据,特别是数组时,需要使用序列化,否则IE会报错:不能执行已经释放Script的代码
  3. 在进行本地存储时
    存储在本地window.localStorage.setItem(key,value)存储的value是json序列化的字符串;获取得到的window.localSorage.getItem(key)也是json序列化的字符串,需要经过json的反序列化进行使用。代码如下:
window.localStorage.setItem('mark', JSON.stringify(obj)) //本地存储
JSON.parse(window.localStorage.getItem('mark'))  //获取存储的值

JSON.parse(JSON.stringify(obj))

JSON.parse(JSON.stringify(obj))一般用来深拷贝,其过程就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;序列化的作用是存储(对象本身存储的只是一个地址映射,如果断电,对象将不复存在,因此需将对象的内容转换成字符串的形式再保存在磁盘上 )和传输(例如 如果请求的Content-Type是 application/x-www-form-urlencoded,则前端这边需要使用qs.stringify(data)来序列化参数再传给后端,否则后端接受不到;ps: Content-Type 为 application/json;charset=UTF-8或者 multipart/form-data 则可以不需要 );
不过,这种实现深拷贝的方法有局限性,它只适用于一般数据的拷贝(对象、数组)

你可能感兴趣的:(javascript)