json.stringify()可将js对象转为json字符串,支持缩进美化、replacer筛选/转换、手动处理date/bigint及避免循环引用错误。

使用 JSON.stringify() 方法即可将 JavaScript 对象转换为 JSON 字符串。
基础用法:直接序列化对象
最常用的方式是传入一个普通对象或数组:
const obj = { name: "张三", age: 25, isActive: true };
const jsonStr = JSON.stringify(obj);
// 结果:'{"name":"张三","age":25,"isActive":true}'
注意:undefined、函数、Symbol 类型的属性会被自动忽略;Date 对象会被转成 ISO 字符串;RegExp 和 Error 对象会变成空对象 {}。
控制输出格式:添加缩进和空格
第二个参数可以是 replacer(用于筛选或转换值),第三个参数用于美化输出:
const obj = { a: 1, b: { c: 2 } };
JSON.stringify(obj, null, 2);
// 输出带缩进的字符串,便于阅读
// {
// "a": 1,
// "b": {
// "c": 2
// }
// }
自定义序列化行为:使用 replacer 参数
replacer 可以是数组(指定保留哪些键)或函数(对每个键值对做处理):
- 数组形式:只保留列出的属性名
- 函数形式:返回 undefined 表示跳过该属性,否则返回要序列化的值
const obj = { name: "李四", password: "123456", email: "lisi@example.com" };
// 只保留 name 和 email
JSON.stringify(obj, ["name", "email"]);
// '{"name":"李四","email":"lisi@example.com"}'
// 过滤敏感字段
JSON.stringify(obj, (key, value) => key === "password" ? undefined : value);
// '{"name":"李四","email":"lisi@example.com"}'
处理特殊类型:日期、BigInt、循环引用
原生 JSON.stringify 不支持 Date 自动转字符串(会转成 ISO)、不支持 BigInt、也不允许循环引用。遇到这些情况需手动处理:
- Date:在 replacer 函数中检测并转成字符串(如
value instanceof Date ? value.toISOString() : value) - BigInt:需在 replacer 中显式转成字符串或数字(如
typeof value === 'bigint' ? value.toString() : value) - 循环引用:会抛出
TypeError: Converting circular structure to JSON,需提前清理或使用第三方库(如 flatted)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











