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 或函数的属性。
  • 可以使用 replacerspace 选项进行自定义。

示例

基本用法

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 没有原生的日期类型。

祝编码愉快! 🔥

Back to Blog

相关文章

阅读更多 »

非受控 vs 受控 React 组件

React 为开发者提供了多种在应用中管理和处理组件的方法。两种常见的方式是 uncontrolled components 和 controlled components……