JSON.stringify()可将JavaScript对象转为JSON字符串,自动忽略函数/undefined/Symbol,Date转ISO字符串,支持缩进格式化和replacer自定义序列化,但遇循环引用会报错。

使用 JSON.stringify() 方法即可将 JavaScript 对象转换为 JSON 字符串。
基础用法:直接序列化对象
最简单的情况是传入一个纯对象(不含函数、undefined、Symbol、Date 实例等非法值):
const obj = { name: "Alice", age: 30, city: "Beijing" };
const jsonStr = JSON.stringify(obj);
// 结果:'{"name":"Alice","age":30,"city":"Beijing"}'
处理特殊值和类型
JSON.stringify() 会自动忽略或转换不支持的类型:
- 函数、
undefined、Symbol类型的属性会被忽略(不在结果中出现) -
Date对象会被转为 ISO 格式字符串(如"2023-01-01T00:00:00.000Z") -
NaN和Infinity会被转为null -
undefined作为对象属性值时被忽略;作为数组元素时变成null
格式化输出(可读性增强)
传入缩进参数,让生成的 JSON 更易读:
立即学习“Java免费学习笔记(深入)”;
const obj = { user: { id: 1, roles: ["admin", "editor"] } };
const pretty = JSON.stringify(obj, null, 2);
// 输出带 2 个空格缩进的字符串
自定义序列化行为(replacer 参数)
第二个参数 replacer 可以是数组(指定要保留的键)或函数(控制每个值的处理):
// 只保留 name 和 score 字段
JSON.stringify({ name: "Bob", age: 25, score: 95 }, ["name", "score"]);
// → '{"name":"Bob","score":95}'
// 使用函数过滤或转换
JSON.stringify({ price: 199.99, discount: 0.15 }, (key, value) =>
key === "price" ? Math.round(value) : value
);
// → '{"price":200,"discount":0.15}'
注意:如果对象含有循环引用,JSON.stringify() 会抛出 TypeError。需要先检测或用第三方库(如 flatted)处理。


















