json.stringify()可将javascript对象转为json字符串,支持基本类型、数组和普通对象;不可序列化值(如函数、undefined、symbol)被忽略;可通过replacer参数(函数或数组)自定义过滤或转换,space参数控制缩进格式。

用 JSON.stringify() 方法即可将 JavaScript 对象转为 JSON 字符串。
基本用法:直接序列化对象
最简单的情况是传入一个普通对象或数组:
const obj = { name: "张三", age: 25, isActive: true };
const jsonStr = JSON.stringify(obj);
console.log(jsonStr); // {"name":"张三","age":25,"isActive":true}
注意:JSON.stringify() 会自动处理数据类型转换,但只支持以下原生类型:
- 字符串、数字、布尔值、null
- 数组(元素需可序列化)
- 普通对象(键必须是字符串,值需可序列化)
处理不可序列化的值
函数、undefined、Symbol、BigInt、Date 实例、RegExp、Map、Set 等默认会被忽略或抛错:
const obj = {
name: "李四",
fn: function() {},
undef: undefined,
date: new Date(),
sym: Symbol('a')
};
console.log(JSON.stringify(obj)); // {"name":"李四"}
若需自定义行为,可传入第二个参数——替换函数(replacer) 或数组(指定要保留的属性名):
- 用数组过滤字段:
JSON.stringify(obj, ['name', 'age']) - 用函数控制每个键值:
JSON.stringify(obj, (key, value) => key === 'date' ? value.toISOString() : value)
美化输出:添加缩进和换行
第三个参数可指定缩进空格数或自定义缩进字符串:
const obj = { user: { id: 1, role: "admin" } };
console.log(JSON.stringify(obj, null, 2));
// 输出:
// {
// "user": {
// "id": 1,
// "role": "admin"
// }
// }
常见注意事项
序列化时容易踩坑的地方:
- 循环引用对象会报错:
TypeError: Converting circular structure to JSON - Date 对象默认转成字符串,但格式是 ISO 8601;如需其他格式,先手动转成字符串再序列化
- NaN 和 Infinity 会被转为
null - 对象中的原型方法、getter/setter 不会被序列化(除非在 replacer 中显式处理)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











