JSON方法序列化js对象

2021年10月13日 6点热度 0条评论 来源: 程序员-小许

序列化对象

序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。因为对象本身存储的只是一个地址映射,如果程序停止了,映射关系就没了,所以对象obj的内容需要保存或传输,就要将对象序列化。

在javascript中,ECMAScript 5中提供了内置函数JSON.stringify()和JSON.parse()用来序列化和反序列化js对象。 可以把js对象的内容json格式的字符串,进行可传输和保存其内容。另外还可以运用于普通对象的深度拷贝。

因为JSON的语法是JavaScript语法的子集,它并不能表示JavaScript中的所有值,所以对于JSON语法不支持的属性,会有序列化( JSON.stringify() )的诸多特性。

JSON.stringify() 序列化特性

1、JSON的格式

{ "one": 1, "two": 2, "three": 3 }

 

JSON数据有一定的格式要求,在JSON.stringify()序列化后,js对象会被规范为正确的JSON格式的字符串

// 属性名必须使用双引号

// 不能使用十六进制值

// 对象不能以,结尾

 

 

2、对于 undefined、任意的函数以及symbol,三个特殊的值分别作为对象属性的值、数组元素、单独的值时 JSON.stringify()将返回不同的结果。

undefined、任意的函数以及 symbol 作为对象属性值时 JSON.stringify() 对跳过(忽略)它们进行序列化

 

undefined、任意的函数以及 symbol 作为数组元素值时,JSON.stringify() 将会将它们序列化为 null

 

undefined、任意的函数以及 symbol 被 JSON.stringify() 作为单独的值进行序列化时,都会返回 undefined

 

3、转换值如果有 toJSON() 函数,该函数返回什么值,序列化结果就是什么值,并且忽略其他属性的值。

当对象自身带有toJSON()方法时,JSON.stringify()会调用的toJSON()方法,并使用该方法的返回值进行字符串化;

 

另外日期对象Date因为自己部署了 toJSON() 方法(同Date.toISOString()),因此 Date 对象会被当做字符串处理。

 

4、NaN 和 Infinity 格式的数值及 null 都会被当做 null。

 

5、三大包装对象的序列化。

 

6、JSON.stringify()只能序列化对象的可枚举的自有属性。

 

7、序列化RegExp、Error、map等对象时会得到{}空对象。

 

JSON.stringify() 第二个参数和第三个参数

1、第二个参数 replacer

replacer 参数有两种形式,可以是一个函数或者一个数组。作为函数时,它有两个参数,键(key)和值(value),函数类似就是数组方法 map、filter 等方法的回调函数,对每一个属性值都会执行一次该函数。如果 replacer 是一个数组,数组的值代表将被序列化成 JSON 字符串的属性名。

replacer 作为函数时,我们可以打破上面序列号的一些特性的问题。

 

replacer 作为数组时,数组的值就代表了将被序列化成 JSON 字符串的属性名。

 

2、第三个个参数 space

space 参数用来控制结果字符串里面的间距,简单来说就是可以格式化JSON数据

技巧:可以通过JSON.stringify(JSON.parse(this.config), null, '\t')来格式化你的json文本

 

JSON.parse() 有两个参数

第一个参数是要解析的字符串,第二个与JSON.stringify()的第二个参数replacer类似

    原文作者:程序员-小许
    原文地址: https://blog.csdn.net/m0_37820751/article/details/108461752
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。