JSON是纯文本数据格式,JavaScript对象字面量是运行时内存结构;JSON必须为双引号字符串,仅支持六种数据类型,无函数、undefined、注释等,跨语言通用。

本质区别在于:JSON 是一种纯文本数据格式,而 JavaScript 对象字面量是运行时的内存数据结构。
JSON 是字符串,对象字面量是代码
JSON 必须是字符串形式,哪怕看起来像对象,比如 {"name":"Alice"},只有被引号包围(如 '{"name":"Alice"}')才是真正的 JSON;而 {name:"Alice"} 是 JavaScript 代码,直接执行会创建一个对象实例。JSON 不是 JavaScript 的一部分,它不依赖 JS 引擎也能被 Python、Java 等语言解析。
键名和字符串必须用双引号
JSON 要求所有键名和字符串值都严格使用双引号包裹。单引号或省略引号都不合法:
- ✅ 合法 JSON:
{"id": 1, "active": true} - ❌ 非法 JSON:
{'id': 1}(单引号)、{id: 1}(无引号)、{"id": 1,}(尾随逗号)
支持的数据类型完全不同
JSON 只允许六种类型:字符串、数字、布尔值、null、数组、对象。以下在 JavaScript 中合法的内容,在 JSON 中均不被接受:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
立即学习“Java免费学习笔记(深入)”;
- 函数:
{"greet": function() {}}→ JSON 不允许 - undefined:
{"value": undefined}→ JSON 没有 undefined - 日期、正则、Symbol、BigInt、NaN、Infinity
- 循环引用或原型链信息
没有变量、没有语句、没有逻辑
JSON 文件里不能声明变量、不能写分号、不能包含注释、不能调用方法。它只是静态数据的描述:
- ❌
let user = {"name": "Tom"};→ 这是 JS 语句,不是 JSON - ❌
{"name": "Tom"} // comment→ 注释让 JSON 解析失败 - ✅
{"name": "Tom", "hobbies": ["reading", "coding"]}→ 纯数据,可跨语言传输
真正用起来时,JS 提供 JSON.parse() 把 JSON 字符串转成对象,用 JSON.stringify() 把对象转成 JSON 字符串——这两个操作不是“等价互换”,而是有损转换:函数、undefined、Date 实例等都会被忽略或变成 null。

















