JSON.stringify(value[, replacer[, space]])
JSON.stringify()
的第一个参数是可序列化的js对象
replacer
第二个参数是一个replacer,replacer可以是一个函数或者一个字符串数组
当replacer是数组时,相当于一个白名单,只有在这个数组中的属性最终会被序列化
JSON.stringify({
name: 'acky',
age: 18,
gender: 'male'
}, ['name', 'age'])
// result
// "{"name":"acky","age":18}"
当replacer是函数时,接受两个参数,key和value,注意:
Initially it gets called with an empty key representing the object being stringified, and it then gets called for each property on the object or array being stringified
一开始会先接收到key为空,value为要序列化的对象,必须返回这个对象,否则JSON.stringify()
没有结果,因为会递归对这个对象上的key:value调用replacer函数
var rep = (key, value) => {
if (key === 'name') {
return value.toUpperCase()
}
if (key === 'age') {
return ++value
}
if (key === 'gender') {
return 'female'
}
return value
}
JSON.stringify({
name: 'acky',
age: 18,
gender: 'male'
}, rep)
// result
// "{"name":"ACKY","age":19,"gender":"female"}"
space
第三个参数表示的是每个字符前的缩进,可以是字符串,或者数字,数字表示的是缩进的空格,最大为10
当使用字符串作为缩进的时候
JSON.stringify({ name: 'acky', age: 19, gender: 'male' }, null, 'hello world')
// result
"{
hello worl"name": "acky",
hello worl"age": 19,
hello worl"gender": "male"
}"
当使用数字表示缩进的空格时
JSON.stringify({ name: 'acky', age: 19, gender: 'male' }, null, 10)
// result
"{
"name": "acky",
"age": 19,
"gender": "male"
}"