序列化和反序列化

12 篇文章 0 订阅


最初接触代码就知道序列化与反序列化,但一直没有深入的了解它们,今天就好好的深入梳理下,从头开始

JSON

JavaScript Object Notation
官方的定义是:JSON 是一种存储和交换数据的语法。是通过 JavaScript 对象标记法书写的文本。

其实JSON就是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名。

备注
构造字符[ ] { } : ,在这六个构造字符的前或后允许存在无意义的空白符
字面名false、null、true必须小写

值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个
任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。

  • 对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, …} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。

  • 数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 [“java”, “javascript”, “vb”, …] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

JSON 与 JS 对象的关系

通俗的说,JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。如:

var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串

序列化

即 js 中的 Object 转化为 字符串

1.使用 obj.toJSONString()

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

2.使用JSON.stringify(obj) – 常用

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

反序列化

即 js 中 JSON 字符串转化为 Object

1.使用eval(‘(’+josnStr+‘)’)

var obj=eval("("+data+")");

为什么要 eval 这里要添加 “(”+data+")” 呢?
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在 JS 中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

2.使用jsonStr.parseJSON()

var obj = jsonStr.parseJSON(); //由JSON字符串转换为JSON对象

3.使用parse(jsonStr) – 常用

var obj = JSON.parse(data); //由JSON字符串转换为JSON对象

JSON 和 JS 对象互转

要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法:

var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}

要实现从JS对象转换为JSON字符串,使用 JSON.stringify() 方法:

var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'

使用场景

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 的反序列化进行使用(常见 json 序列化数组)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值