返回

揭秘鲜为人知的JavaScript JSON魔法

前端

JSON.stringify()方法的秘密参数
除了第一个参数(要序列化的对象)之外,JSON.stringify()方法还接受两个可选参数:

  • replacer :一个函数,用于转换要序列化的对象中的值。
  • space :一个数值,用于指定序列化后的JSON字符串中的缩进量。

使用replacer函数转换对象值

replacer函数允许您在序列化对象时转换其值。例如,您可以使用它来:

  • 将对象中的日期值转换为字符串。
  • 将对象中的特殊字符(如双引号)进行转义。
  • 将对象中的循环引用排除在外。

以下示例演示如何使用replacer函数转换对象值:

const obj = {
  name: "John Doe",
  age: 30,
  date: new Date(),
  循环引用:obj
};

const replacer = (key, value) => {
  if (value instanceof Date) {
    return value.toISOString();
  } else if (typeof value === "string") {
    return value.replace(/"/g, "\\\"");
  } else if (value === obj) {
    return null; // 排除循环引用
  } else {
    return value;
  }
};

const json = JSON.stringify(obj, replacer, 2);
console.log(json);

输出:

{
  "name": "John Doe",
  "age": 30,
  "date": "2023-02-22T16:15:07.762Z",
  "循环引用": null
}

使用space参数格式化JSON字符串

space参数允许您指定序列化后的JSON字符串中的缩进量。这使得JSON字符串更易于阅读和理解。以下示例演示如何使用space参数格式化JSON字符串:

const obj = {
  name: "John Doe",
  age: 30,
  date: new Date()
};

const json = JSON.stringify(obj, null, 2);
console.log(json);

输出:

{
  "name": "John Doe",
  "age": 30,
  "date": "2023-02-22T16:15:07.762Z"
}

结语

JSON.stringify()方法中的replacer和space参数为我们提供了强大的工具来转换对象值和格式化JSON字符串。这使得JSON在数据交换、安全传输、数据格式化等方面的应用更加广泛。掌握这些技巧,可以帮助您编写出更加灵活和可维护的代码。