JSON 与 JavaScript 对象字面量的区别
JSON 看起来像 JavaScript 对象字面量,但它是一种更小、语法更严格、不包含可执行值的数据格式。
简短版本
JavaScript 对象字面量是源代码,JSON 是数据交换格式。两者重合的部分足以让人混淆,但规则不同:JSON 的键和字符串必须用双引号;JSON 没有注释;JSON 也无法表示函数、undefined、NaN、Infinity、Date 对象或正则表达式。
合法的 JSON 值
一份 JSON 文档可以包含对象、数组、字符串、数字、布尔或 null。字符串必须用双引号;对象的键也必须是双引号字符串。数字不能使用 JavaScript 专有的写法,例如十六进制、NaN、Infinity 或数字分隔符。
- 合法的 JSON 字符串:"hello"
- 合法的 JSON 布尔:true
- 合法的 JSON null:null
- 合法的 JSON 对象键:"name"
合法的 JavaScript 但不是合法 JSON
{ name: 'Ada', active: true, createdAt: new Date(), onSave() { return true }, tags: ['dev',], }
对应的合法 JSON
{ "name": "Ada", "active": true, "createdAt": "2026-05-13T00:00:00.000Z", "tags": ["dev"] }
为什么 API 会拒绝看起来像 JavaScript 的数据
API 服务端通常用 JSON 解析器解析请求体,而不是 JavaScript 引擎。这既是安全也是兼容性的考量:所有语言都能解析同样的数据,而不需要执行代码。如果请求体里出现注释、方法、undefined 或 new Date(),服务端就无法把它当作普通数据处理。
如何安全地转换
把可执行的或语言特有的值换成普通数据。日期改成字符串,缺失值用 null 或干脆省略键,注释挪到文档里,函数则用显式数据字段(比如策略名或类型值)来表示。
JSON 修复指南
主题中心
- JSON Parse Errors: Read the Message, Jump to the Fix
- Fix Invalid JSON: From 'What's Wrong' to a Clean File
- JSON Formatter, Validator, Viewer: Pick the Right Tool
- Repair LLM JSON Output: Handling Almost-JSON from AI
- Privacy: JSON Tools That Don't Leave Your Browser
- JSON Interop: YAML, CSV, XML, JWT, Schema
具体指南
- 如何解码 Base64 字符串(以及 JWT Payload)
- URL 编码:百分号编码查询参数与路径
- 将 YAML 转为 JSON(并避免缩进错误)
- 将 JSON 转为 CSV:把对象数组扁平化
- 将 JSON 转为 XML:根元素、属性与数组
- 将 JSON 转义为字符串字面量(并解码双重编码的 JSON)
- 修复 JSON 中的尾随逗号
- 修复 JSON 中的单引号
- 修复 JSON 中未加引号的键
- 修复 LLM 输出的 JSON
- 修复 JSON 解析错误:Expected Property Name
- 在发起 API 请求前校验 JSON
- JSON 格式化器 vs JSON 修复工具
- 修复 JSON Unexpected Token 错误
- JSON 转 JavaScript 对象转换器