JSON.stringify()是一个将对象转为 JSON 格式字符串的方法。它有三个参数值,分别是:要被序列化的值或对象、替换器(replacer)、空格(space)。
对象
这个参数非常简单,它就是我们需要转换为 JSON 字符串的对象或者值。
let data = {
name: 'Tom',
age: 30,
city: 'New York'
};
let jsonString = JSON.stringify(data);
console.log(jsonString);
// 输出:'{"name":"Tom","age":30,"city":"New York"}'
替代器(replacer)
JSON.stringify()的第二个参数是一个函数或数组,用于控制如何序列化对象。如果 replacer 参数是一个函数,这个函数会被原始值(对象)的每个属性调用。函数的返回值会被序列化成 JSON 字符串。如果函数返回undefined,那么这个属性就不会被包含在最终的 JSON 字符串中。例如,我们可以使用 replacer 来修改值或者过滤掉不需要的值:
let data = {
name: 'Tom',
age: 30,
city: 'New York'
};
let jsonString = JSON.stringify(data, (key, value) => {
if (typeof value === 'number') {
return value.toString();
}
return value;
});
console.log(jsonString);
// 输出:'{"name":"Tom","age":"30","city":"New York"}'
如果 replacer 参数是一个数组,那么只有数组中存在的属性才会被包含在最终的 JSON 字符串中。
例如:
let data = {
name: 'Tom',
age: 30,
city: 'New York'
};
let jsonString = JSON.stringify(data, ['name', 'city']);
console.log(jsonString);
// 输出:'{"name":"Tom","city":"New York"}'
空格(space)
JSON.stringify() 的第三个参数用来控制结果字符串的格式。如果 space 是一个数值,那么它决定了结果字符串的缩进层级。否则,如果 space 是一个字符串(例如 \t 或者空格 ' '),那么这个字符串就被用作缩进。例如,我们可以使用空格参数来获得更美观的输出:
let data = {
name: 'Tom',
age: 30,
city: 'New York'
};
let jsonString = JSON.stringify(data, null, 2);
console.log(jsonString);
/* 输出:
{
"name": "Tom",
"age": 30,
"city": "New York"
}
*/