这个指南解决什么问题?

本页用于排查 JSON 格式化、校验、类型和复制复核问题,帮助你把接口响应、日志片段或配置文件转换成可读、可检查、可安全复制的结构。

什么时候应该停下来复核?

当输入来自生产日志、接口响应、客户数据、密钥片段或待发布配置时,应先脱敏并保留原始样本,再比较工具输出是否只改变预期格式。

首页 / 指南中心 / JSON.stringify 与 JSON.parse 数据丢失排查

JSON.stringify 与 JSON.parse 数据丢失排查

说明 stringify/parse 往返中 undefined、函数、Date、大整数、NaN、Infinity 和循环引用的常见数据丢失。

JSON 往返检查

先用 JSON 工具观察序列化后的文本,再确认字段是否被丢弃或改写。

打开 JSON 工具

这个页面解决什么问题

很多开发者把 JSON.stringify 和 JSON.parse 当成“深拷贝”或“保存任意对象”的通用方法,但 JavaScript 对象并不都能无损变成 JSON。undefined、函数、Symbol、Date、NaN、Infinity、Map、Set、循环引用和大整数都可能丢失、变成 null、变成字符串或直接报错。

这个页面适合排查本地缓存、接口 mock、日志落盘、前端状态复制和调试工具输出不一致的问题。重点是确认序列化后的 JSON 是否还能表达原始对象的业务含义。

快速判断

可复制示例:错误输入与修复后输入

下面样例展示了原始对象和可持久化 JSON 的差异。修复不是让 JSON 支持所有类型,而是显式转换业务需要的值。

const source = { count: NaN, save: undefined, createdAt: new Date(), run(){}, items:[undefined, 1] };
JSON.stringify(source);
{"count":null,"createdAt":"2026-06-01T09:00:00.000Z","items":[null,1],"note":"non-json values removed before export"}

修复后的 JSON 明确承认不可表示的值已经被处理,并用 note 记录转换决策。对于业务关键字段,应在序列化前手动映射,而不是依赖默认行为。

诊断步骤

  1. 列出对象里所有非 JSON 类型:函数、undefined、Date、Map、Set、BigInt、Symbol。
  2. 先对小对象执行 stringify,查看字段是否消失或变成 null。
  3. 把结果粘贴到 JSON 工具 中格式化,逐项对照原对象。
  4. 需要 Date 时记录为 ISO 字符串,并在读取端显式转回 Date。
  5. 需要大整数时优先用字符串保存,避免 JavaScript number 精度限制。
  6. 禁止用 JSON 往返替代严肃的深拷贝或数据迁移方案。

JSON 是数据交换格式,不是 JavaScript 对象快照。凡是无法被 JSON 直接表达的类型,都应该有显式转换规则和测试样例。

常见错误表

现象或场景常见原因处理动作
属性消失值为 undefined、函数或 Symbol。序列化前转换为 null、字符串或删除并记录原因。
数组项变成 null数组中有 undefined、NaN 或 Infinity。确认目标系统是否接受 null,必要时过滤。
时间变成字符串Date 自动转成 ISO 字符串。读取端显式解析,并保留时区语义。
stringify 抛出循环引用错误对象互相引用。改用专门序列化方案或手动抽取无循环数据。

常见误判

排查数据丢失时,要把“序列化前对象”和“序列化后 JSON 文本”并排保存。只看 parse 后结果,很难判断是写入时丢失还是读取时解释错误。

隐私、安全和适用边界

用于排查时请使用脱敏样本。不要粘贴访问令牌、Cookie、客户资料、内部域名、未公开商业规则、支付记录或完整生产日志。页面适合处理公开示例、教学片段、复现样本和已经替换真实值的配置。

本页仅讨论 JSON 与 JavaScript 常见行为。其他语言的序列化库可能有自定义规则,正式数据迁移应以项目 schema、测试和版本兼容策略为准。

复制或发布前复核清单

  1. 是否列出所有非 JSON 类型字段。
  2. 是否确认 undefined、函数和 Symbol 没有被静默丢弃。
  3. Date 是否保存了明确时区。
  4. 大整数是否用字符串表示。
  5. 是否保留原始对象和序列化文本的对比记录。
  6. 是否在目标读取端验证 parse 后类型。

相关工具和延伸阅读

参考依据

参考资料和规范来源

本页的排查建议结合浏览器行为、公开标准和常见开发实践整理。涉及线上发布、安全决策或兼容性判断时,请以官方规范和你自己的运行环境为准。

编辑记录:Ymir Tool editorial review,2026-06-01。本页作为 Sprint 3 新增案例/排错内容发布,目标是把单一工具入口扩展为可复核的任务说明、错误示例和操作边界。

编辑与复核说明

本页由 Ymir Tool editorial review 维护,最后更新于 2026-06-01。页面示例使用合成输入,避免展示真实密钥、客户资料或生产日志。复制结果到正式流程前,请结合对应工具页、官方规范和你自己的运行环境再次确认。