JavaScript中安全处理JSON需用try...catch包裹JSON.parse()并利用reviver转换日期,JSON.stringify()会忽略undefined/函数/Symbol且不支持循环引用,须手动处理ISO日期、过滤循环引用及编码问题。
JavaScript 中解析和操作 JSON 数据主要靠 JSON.parse() 和 JSON.stringify(),但实际使用中容易踩坑——比如日期变字符串、函数丢失、循环引用报错、特殊字符处理异常等。
用 JSON.parse() 解析字符串时,必须确保输入是合法 JSON 格式(双引号键名、无尾逗号、无注释、无 undefined 或函数)。非法格式会直接抛出 SyntaxError。
response.json()(fetch API)自动解析,但后端返回非 JSON 内容时仍需错误处理JSON.stringify() 会忽略 undefined、函数、Symbol 类型的属性,且不能处理循环引用对象(会报 TypeError: Converting circular structure to JSON)。
obj.date = obj.date.toISOString()
flatted 或 cycle
" ")以下问题高频出现,且容易被忽视:
JSON.stringify(new Date()) 返回 "2025-01-01T00:00:00.000Z" 是对的,但 JSON.parse() 不会自动还原为 Date,得靠 reviver 手动转换null,解析后无法区分原始值Content-Type: application/json; charset=utf-8,或文件保存编码不是 UTF-8camelize/decamelize
不必每次都手写容错逻辑,可以封装轻量工具函数:
safeParse(jsonStr, defaultValue = null),内部 try/catch 并返回默认值JSON.stringify(obj, (key, val) => typeof val === 'bigint' ? val.toString() : val) 支持 BigInt(ES2025+)console.log(JSON.stringify(obj, null, 2)) 查看结构,比直接打印更清晰