JSON.Stringify 的第二个参数
发布: (2026年2月4日 GMT+8 11:49)
3 min read
原文: Dev.to
Source: Dev.to
语法
JSON.stringify(value, replacer, space);
- value – 要转换的 JavaScript 值(对象、数组、字符串、数字等)。
- replacer (可选) – 一个函数或数组,用于在序列化之前转换该值。
- space (可选) – 用于缩进输出的字符串(或数字),以提高可读性。
功能说明
- 直接将字符串、数字、布尔值和
null等原始值转换为对应的 JSON 表示。 - 通过遍历数组的元素并对每个元素进行序列化来转换数组。
- 通过枚举对象的属性并对键‑值对进行序列化来转换对象。
- 默认会排除值为
undefined或函数的属性。 - 可以使用
replacer和space选项进行自定义。
示例
基本用法
const object = { name: "Alice", age: 30 };
JSON.stringify(object); // '{"name":"Alice","age":30}'
const array = [1, 2, 3];
JSON.stringify(array); // '[1,2,3]'
const date = new Date();
JSON.stringify(date); // '"2024-02-07T02:54:22.394Z"' (不推荐)
使用 replacer 函数排除属性
const object = { name: "Alice", age: 30, password: "secret" };
const jsonString = JSON.stringify(object, (key, value) => {
if (key === "password") return undefined; // 排除密码
return value;
});
// '{"name":"Alice","age":30}'
使用 replacer 数组过滤属性
const objects = [
{ name: "Eka Prasetia" },
{ city: "Jakarta" },
{ hobby: "Play codes" },
];
JSON.stringify(objects, ["name", "hobby"], 2);
// [
// {
// "name": "Eka Prasetia"
// },
// {},
// {
// "hobby": "Play codes"
// }
// ]
使用 replacer 函数替换属性值
const result = JSON.stringify(
objects,
(key, value) => {
if (key.match(/name|city/)) return "👨👩👧✌";
return value;
},
2
);
// [
// {
// "name": "👨👩👧✌"
// },
// {
// "city": "👨👩👧✌"
// },
// {
// "hobby": "Play codes"
// }
// ]
第二个参数(replacer)可以是一个函数,该函数会针对每个属性被调用。它可以返回一个新值(字符串、数字等)来替换原始值,或者返回 undefined 以在输出中省略该属性。
关键要点
JSON.stringify()在向服务器发送数据或存入本地存储时非常有用。- 序列化对象时要注意循环引用或函数。
- 使用
replacer可以自定义输出或排除敏感信息。 - 避免直接序列化
Date对象,因为 JSON 没有原生的日期类型。
祝编码愉快! 🔥