JSON是严格格式的字符串,键名须双引号、禁尾逗号、不支持函数/undefined/Date等JS类型;解析用JSON.parse()(需字符串输入+try...catch),序列化用JSON.stringify()(忽略undefined/函数/Symbol,循环引用报错)。

JSON 是一种轻量级的数据交换格式,不是 JavaScript 的专属语法,但 JavaScript 原生支持解析和生成它——JSON.parse() 和 JSON.stringify() 就是唯二需要掌握的核心方法。
JSON 是什么:不是对象,也不是 JS 代码
JSON(JavaScript Object Notation)本质是字符串,有严格语法规则:键名必须用双引号包裹,不能用单引号或不加引号;不允许尾随逗号;不支持函数、undefined、Date、RegExp 等 JS 特有类型;null 合法,但 NaN 和 Infinity 不合法。
常见错误现象:
-
JSON.parse("{name: 'Alice"}')→ 报错:键名没双引号 -
JSON.parse('{"age": 25,}')→ 报错:末尾逗号 -
JSON.parse('{"time": new Date()}')→ 报错:new Date()不是合法 JSON 值
用 JSON.parse() 安全解析字符串
它只接受字符串输入,其他类型会先被转成字符串再解析(通常导致意外结果),所以务必确认输入是字符串。
立即学习“Java免费学习笔记(深入)”;
实操建议:
-
后端返回的响应体(如
fetch().then(r => r.text()))需显式转为字符串再解析,不要依赖自动转换 - 加
try...catch捕获解析失败,避免静默崩溃:try { const data = JSON.parse(jsonString); } catch (e) { console.error('JSON 解析失败:', e.message); } - 可传入第二个参数
reviver函数,在解析过程中过滤或转换值,比如把时间字符串转为Date对象
用 JSON.stringify() 序列化时注意边界情况
它会忽略 undefined、函数、Symbol 类型的属性;循环引用直接抛错;Date 对象会被转为 ISO 字符串;NaN 和 Infinity 被转为 null。
常见陷阱:
-
JSON.stringify({x: undefined, y: 1})→"{"y":1}"(x消失了) -
const obj = {}; obj.self = obj; JSON.stringify(obj)→ 抛出TypeError: Converting circular structure to JSON - 想保留
Date或自定义格式?得用replacer参数或提前处理字段
浏览器和 Node.js 兼容性基本不用操心
JSON 对象在 IE8+、所有现代浏览器及 Node.js 0.10+ 中都原生存在,无需 polyfill。但要注意:某些嵌入式 JS 环境(如旧版微信小程序 WebView、部分 IoT 设备 JS 引擎)可能不支持 JSON 全局对象,这时才需检查是否存在并 fallback。
真正容易被忽略的是:JSON 只是数据载体,它不携带类型信息、不包含行为逻辑——解析出来的永远是纯数据对象,没有原型链、没有方法。如果业务依赖 Date 实例或自定义类结构,必须在解析后手动重建。











