json.stringify可将javascript对象转为标准json字符串,但会忽略函数、undefined、symbol键,将nan/infinity转null,date转iso字符串;支持replacer(过滤/转换)和space(缩进)参数,不处理循环引用。

JSON.stringify 能把 JavaScript 对象转成标准 JSON 字符串,但遇到函数、undefined、Symbol、循环引用等“不可序列化”的值时会跳过或报错。要正确处理复杂对象,关键在于理解它的参数机制和常见陷阱。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
基础用法与默认行为
直接调用 JSON.stringify(obj) 会忽略:
• 函数属性(包括方法)
• undefined 值(键值为 undefined 的属性被删除)
• Symbol 类型的键
• NaN、Infinity 被转为 null
• Date 实例被转为 ISO 字符串(如 "2024-05-10T08:30:00.000Z")
用 replacer 参数定制序列化逻辑
第二个参数 replacer 可以是数组或函数:
• 数组:只保留指定 key 的属性,比如 ["name", "age"]
• 函数:对每个键值对做预处理,返回值决定最终内容。例如过滤掉敏感字段或格式化日期:
JSON.stringify(obj, (key, value) => {
if (key === 'password') return undefined; // 删除密码字段
if (value instanceof Date) return value.toISOString();
return value;
});
用 space 参数美化输出
第三个参数 space 控制缩进,便于调试:
• 数字:表示空格数(如 2)
• 字符串:用该字符串缩进(如 "\t")
• 注意:生产环境一般不加 space,避免增加体积
处理循环引用和特殊类型
原生 JSON.stringify 不支持循环引用,会抛出 TypeError。解决方式:
• 手动断开引用(如用 ID 替代嵌套对象)
• 使用自定义 replacer 过滤掉已遍历过的对象(需维护追踪 Set)
• 借助第三方库如 flatted 或 cycle 支持循环结构
• 对 Map、Set、RegExp 等类型,需在 replacer 中显式转换(如 Map → Object)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










