JS的JSON的其余参数的使用

42 阅读2分钟

在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"]}'

在这个例子中,只有namehobbies属性被包含在结果字符串中。

第二个参数是函数

当第二个参数是函数时,它会在序列化每个属性时被调用。这个函数接收两个参数:键名和值。函数的返回值将决定该属性如何被序列化。

例如:

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() 还接受第三个参数,它是一个字符串或数字,用于指定结果字符串中的空白字符。如果省略第三个参数,或者为nullundefined,则不会在结果字符串中插入任何空白字符。

  • 如果是数字,它指定缩进的空白数量(最多为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字符串,其中包含两个空格的缩进,使输出更容易阅读。