修复 JSON 中的尾随逗号
对象最后一个属性或数组最后一项后面的尾随逗号在部分 JavaScript 场景下允许,但在 JSON 中并不合法。
为什么会出错
JavaScript 对象字面量经常允许末尾的逗号,但 JSON 要求最后一项后面紧跟着关闭的方括号或花括号。
出错示例
{ "name": "Ada", "active": true, }
修复后的 JSON
{ "name": "Ada", "active": true }
尾随逗号是从哪儿来的
大多数都来自有人手工编辑配置、注释掉最后一项,或从 JavaScript / TypeScript 源代码里粘贴过来。模板引擎和代码生成器在循环里无脑加逗号也会产生这种问题。
为什么有些解析器接受、JSON 却不接受
JavaScript 对象字面量、JSON5、JSONC、YAML,以及大多数编程语言的字面量语法都允许尾随逗号,因为它能让 diff 更干净。但 RFC 8259 JSON 故意不允许 —— JSON.parse、Go 的 encoding/json、Python 的 json 模块这些严格解析器都会拒绝。
在进入生产前发现尾随逗号
用一个严格的 JSON 解析器在 CI 里 lint 配置文件(jq、python -m json.tool 或 node -e 'JSON.parse(...)')。对 TypeScript 项目,在 Prettier 里给 .json 文件设置 "trailingComma": "none",避免格式化时被加上。
尾随逗号并不总是真正的 bug
如果带尾随逗号的 payload 来自某个 API 或者会产出 JSON 的库,问题其实出在上游的序列化,而不是消费方。在本地把逗号修掉,只是掩盖了生成端的 bug,下一次还会复现 —— 应该去修生成端。
FAQ
问:JSON.parse 以后会接受尾随逗号吗?答:不会 —— 严格模式才是标准。问:JSON5 算不算安全的替代?答:只适合人工编辑的配置;千万别用在线协议里。问:自动修复工具能只去掉尾随逗号吗?答:可以,贴上 JSON 它会连同 其他常见语法错误一起处理掉。
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 中未加引号的键
- 修复 LLM 输出的 JSON
- 修复 JSON 解析错误:Expected Property Name
- JSON 与 JavaScript 对象字面量的区别
- 在发起 API 请求前校验 JSON
- JSON 格式化器 vs JSON 修复工具
- 修复 JSON Unexpected Token 错误
- JSON 转 JavaScript 对象转换器