js中json.stringify(JavaScript语法JSON序列化之stringify实例详解)
介绍
什么是序列化 ,序列化就是将对象数据转换为可以存储或者传输的过程 。在js中 ,经常使用JSON来进行数据的序列化和反序列化 ,需要注意的是JavaScript不是JSON ,JSON也不是JavaScript 。
虽然JSON是基于JavaScript语法 ,但是JSON并不是Javascript的子集 。JSON序列化是将对象或值转换为JSON字符串 ,并提供对应的解析JSON字符串的方法 。
语法
JSON.stringify(value[, replacer [, space]])可将一个js对象或值转换为JSON字符串 ,其一共有三个参数 ,如果指定了replacer且为函数 ,则被序列化的每一个值都会经过此函数的处理;如果replacer为数组 ,则只有在数组中的属性才会被序列化 。
value:将要被序列化的值 ,可为js对象或普通值
replacer:可选参数
如果该参数指定为一个函数 ,则在序列化的过程中,被序列化的值的每一个属性都将经过函数的转换和处理 ,最终的JSON字符串将与函数有关 如果该参数指定为一个数组 ,则在序列化的过程中,只有包含在数组中的属性名才会被序列化 ,最终的JSON字符串与原数据相比是做了“过滤 ” 如果该参数未指定 、指定为null或指定为其他值 ,则在序列化的过程中 ,所有的属性都将被序列化space:可选参数
指定用于缩进的空白字符串个数 如果参数的值为数字 ,则表示有多少个空格;最大值为10 ,若小于1 ,则表示没有空格 如果参数的值为字符串 ,则该字符串被视为空格 ,用于美化输出;如果字符串长度超过10 ,则截取前10 如果没有提供 ,或提供为null ,则表示没有空格异常情况
尝试转换循环引用时 ,会抛出异常 尝试转换BigInt类型时,也会抛出异常 如果不确定被转换数据的类型 ,可将JSON.stringify()放入try/catch中执行案例
value
将对象或值转换为JSON字符串
如果被转换对象中含有toJSON() 方法 ,则最终的JSON字符串有toJSON()决定,因此需要注意不能在方法中轻易覆盖此方法 。 非数组对象在被序列化后 ,不保证其属性还是按照特定的顺序出现在JSON字符串 布尔值 、数字 、字符串的包装类型 ,即通过new Boolean() 、new Number() 、new String()创建的数据 ,在转换时会自动转换成对应的基本数据类型 函数 、undefined单独被转换时 ,会返回undefined;函数 、undefined 、symbol在序列化过程中 ,如果出现在数组中则转换为null ,如果为非数组的属性则会被忽略 无法转换存在循环引用的对象 NaN 、Infinity 、null都会被转换为null 所有以symbol为键的属性都会被忽略掉 ,即使在replacer函数中强制指定了需要包含这些属性 其他类型的对象 ,则仅会序列化可枚举属性replacer
replacer可以是一个函数 ,也可是一个数组 。如果是函数 ,则有两个参数 ,分别为key和value ,两者都可以被序列化;如果是数组 ,则仅在数组中的属性会被序列化 。
space
用来控制序列化后的JSON字符串里面空格的间距 。如果是数字 ,则表示缩进多少个空格;如果是字符串 ,则用该字符串代替空格 。space的最大长度为10
toJSON
如果一个被序列化的对象拥有toJSON方法,则该方法就会覆盖默认的序列化行为 ,即不是该对象被序列化 ,而是调用toJSON方法后返回的值被序列化 。
总结
JSON可使用stringify方法实现对象或值的序列化 replacer参数可以是函数 ,也可以是数组。函数用来处理被序列化的值的每一个属性 ,数组表示只序列化哪些属性 ,两者可以在某些场景下实现相同的效果 被序列化的对象如果有toJSON方法 ,则序列化的是该方法返回的值 JSON.stringify可与localStorage结合使用 ,用于存储登录信息等;也可用于简单的深拷贝 合理使用第二个参数replacer ,可更好的处理序列化对象时可能被忽略 、转换的属性值 在序列化时可能会抛出异常 ,可将其放入try/catch中执行以上就是JavaScript语法 JSON序列化之stringify实例详解的详细内容 ,更多关于JavaScript JSON 序列化 stringify的资料请关注本站其它相关文章!
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!