最近做项目遇到了一个坑爹玩意,就是想后台发送数据,需要Json序列化,因为一些特别的原因,只需要序列化一部分内容,所以坑就出现了。
var str = {
"name":"donspeng",
"site":"https://blog.csdn.net/Donspeng",
'test':{
'deep':'这里是嵌套对象数据'
},
'array':[null,undefined,1],
'symbol':Symbol(),
'undefined':undefined,
'null':null
}
情况一:
单纯序列化数据,序列化上述数据是什么结果?
"{
"name":"donspeng",
"site":"https://blog.csdn.net/Donspeng",
"test":{
"deep":"这里是嵌套对象数据"
},
"array":[null,null,1],
}"
可以看到undefined和symbol值被忽略了,数组中会用null填充
情况二:
只序列化部分数据,比如只序列化’test’和’array’
JSON.stringify(str,['test','array']);
//结果
"{
"test":{},
"array":[null,null,1]
}"
嵌套对象被忽略了
那么我们看一下JSON.stringify的函数用法
JSON.stringify(value [, replacer] [, space])
//
value
必需。 要转换的 JavaScript 值(通常为对象或数组)。
replacer
可选。 用于转换结果的函数或数组。
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。 使用返回值而不是原始值。 如果此函数返回 undefined,则排除成员。 根对象的键是一个空字符串:""。
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。 成员的转换顺序与键在数组中的顺序一样。 当 value 参数也为数组时,将忽略 replacer 数组。
space
可选。 向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取。
如果省略 space,则将生成返回值文本,而没有任何额外空格。
如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格。 如果 space 大于 10,则文本缩进 10 个空格。
如果 space 是一个非空字符串(例如“\t”),则返回值文本在每个级别中缩进字符串中的字符。
如果 space 是长度大于 10 个字符的字符串,则使用前 10 个字符。