贝利信息

JSON与JavaScript有什么关系_如何解析和序列化数据

日期:2026-01-10 00:00 / 作者:夢幻星辰
JSON是独立于JavaScript的语言无关数据格式,仅支持null、boolean、number、string、array、object六种类型,不支持函数、undefined等;JSON.parse()和JSON.stringify()是原生纯数据转换方法,严格遵循双引号、无注释、无尾逗号等语法规则。

JSON 是 JavaScript 的一个子集,但不是 JavaScript 代码

JSON(JavaScript Object Notation)语法源自 JavaScript,但它是独立的、语言无关的数据格式。它只支持 nullbooleannumberstringarrayobject 六种类型,不支持函数、undefinedDateRegExp 或循环引用。这意味着:

JSON.parse('{ "x": undefined }')
会直接报错 SyntaxError: Unexpected token u in JSON at position 9——因为 undefined 不是合法 JSON。

JSON.parse()JSON.stringify() 是唯一标准解析/序列化方法

浏览器和 Node.js 原生提供这两个函数,不依赖外部库。它们不执行代码、不调用构造函数、不处理原型链,纯数据转换:

示例:

JSON.stringify({ a: 1, b: undefined, c: () => {} }, null, 2)
// 输出:
// {
//   "a": 1
// }

常见解析失败原因:空格、BOM、单引号、尾逗号、注释

JSON 格式严格,以下写法全部非法:

调试建议:先 console.log(typeof data, data.slice(0, 50)) 确认是不是字符串,再检查前几个字符是否为 {[

需要自定义行为时,别改 JSON.parse,用封装函数处理边界

比如后端返回日期字符串 "2025-06-15T12:34:56Z",想自动转成 Date 对象;或遇到 null 字段想默认填空字符串。这时不该 monkey patch JSON.parse,而应:

真正容易被忽略的是:JSON 规范不定义时间、二进制、大数(BigInt)的表示方式,这些都得靠业务协议约定,不能指望解析器自动理解。