贝利信息

如何用JavaScript处理JSON数据格式【教程】

日期:2026-01-17 00:00 / 作者:紅蓮之龍
JavaScript处理JSON核心靠JSON.parse()和JSON.stringify(),但需注意:JSON格式严格(键名双引号、无尾逗号/注释/undefined/函数),解析须try...catch;stringify会忽略函数/undefined/Symbol等;fetch的.json()返回Promise需await;循环引用会报错,可用replacer临时绕过或structuredClone。

JavaScript 处理 JSON 数据不需要额外库,核心就靠 JSON.parse()JSON.stringify() 两个原生方法——但用错参数、忽略异常、混淆数据类型,是绝大多数人踩坑的根源。

JSON.parse() 解析字符串时为什么报错 "Unexpected token"?

这是最常见的错误,本质是传入了非标准 JSON 字符串。JSON 格式比 JavaScript 对象字面量更严格:键名必须双引号、不能有尾随逗号、不能用单引号、不允许注释或 undefined / NaN / 函数。

JSON.stringify() 序列化对象时丢失函数和 undefined

JSON.stringify() 只会序列化可枚举的、值为字符串、数字、布尔、null、数组或纯对象的属性。函数、undefinedSymbolDate 对象(不调用 .toISOString())、RegExp 等都会被忽略或转为 null。

从 fetch 获取 JSON 时,.json() 方法返回 Promise

很多人误以为 fetch(url).then(res => res.json()) 是同步操作,其实 res.json() 返回的是 Promise,必须 await 或链式 .then() 才能拿到解析后的 JS 对象。

JSON 不支持循环引用,遇到时会报 "Converting circular structure to JSON"

当对象中存在属性引用自身(或形成闭环引用链),JSON.stringify() 无法处理,直接抛错。这不是 bug,是 JSON 规范本身不支持引用语义。

真正难的从来不是“怎么转”,而是搞清数据源头是否可信、中间有没有被意外篡改、目标环境是否支持新特性(比如 structuredClone 在旧版 Safari 不可用)。别让 JSON 成为黑盒——每次解析后,花半秒 console.log(typeof data) 确认类型,比写十行容错代码更有效。