在JavaScript 的 JSON.stringify()
函数接受第二个参数,它可以是数组或函数,用于指定在字符串化过程中如何处理对象的键和值。
当第二个参数是数组
当第二个参数是数组时,它表示对象中需要被包含在结果字符串中的属性名称。只有数组中指定的属性会被序列化。
例如:
const obj = {
name: "Alice",
age: 30,
hobbies: ["reading", "games", "hiking"]
};
const jsonString = JSON.stringify(obj, ["name", "hobbies"]);
console.log(jsonString); // 输出: '{"name":"Alice","hobbies":["reading","games","hiking"]}'
在这个例子中,只有name
和hobbies
属性被包含在结果字符串中。
第二个参数是函数
当第二个参数是函数时,它会在序列化每个属性时被调用。这个函数接收两个参数:键名和值。函数的返回值将决定该属性如何被序列化。
例如:
const obj = {
name: "Alice",
age: 30,
hobbies: ["reading", "games", "hiking"]
};
const jsonString = JSON.stringify(obj, (key, value) => {
if (typeof value === "number") {
return value * 2; // 将数字值翻倍
}
return value;
});
console.log(jsonString); // 输出: '{"name":"Alice","age":60,"hobbies":["reading","games","hiking"]}'
在这个例子中,对象中的每个数字值都被翻倍了。
第三个参数
JSON.stringify()
还接受第三个参数,它是一个字符串或数字,用于指定结果字符串中的空白字符。如果省略第三个参数,或者为null
或undefined
,则不会在结果字符串中插入任何空白字符。
- 如果是数字,它指定缩进的空白数量(最多为10个空格)。
- 如果是字符串(通常是空格或制表符),则字符串将被用于缩进。
例如:
const obj = {
name: "Alice",
age: 30,
hobbies: ["reading", "games", "hiking"]
};
const jsonString = JSON.stringify(obj, null, 2); // 使用两个空格缩进
console.log(jsonString); // 输出为'{ "name": "Alice", "age": 30, "hobbies": [ "reading", "games", "hiking" ]}'
这个例子将产生一个格式化的JSON字符串,其中包含两个空格的缩进,使输出更容易阅读。