JSON 常见错误大全:尾逗号、单引号、注释,一次讲透

昨天同事调接口调了一个下午,最后发现是尾逗号 ------他把 JavaScript 对象复制过来直接当 JSON 用,数组最后一个元素后面多了个逗号,前端 JSON.parse 当场报错,而他在 200 行的 JSON 里找了一个小时。

这不是个例。JSON 语法严格,很多在 JavaScript 里「顺手」的写法,放进 JSON 就会报错。这篇文章把最高频的 5 类错误一次讲透,每类都附「报错长什么样 + 正确写法」,看完能避开 90% 的坑。

为什么 JSON 比 JavaScript「严」这么多

JS 对象和 JSON 长得几乎一样,但 JSON 是一种数据交换格式,跨语言传输,所以语法必须无歧义------该加引号就加引号,该有逗号就有逗号,一个字符都不能含糊。这就是为什么你在 JS 里写得好好的,复制到 JSON 就报错。

错误一:尾逗号(最高频,没有之一)

数组或对象的最后一个元素后面多写了一个逗号:

json

csharp 复制代码
{ "name": "Tom", "age": 18, }        // ❌ 对象尾逗号
[1, 2, 3,]                            // ❌ 数组尾逗号

{ "name": "Tom", "age": 18 }          // ✅ 正确
[1, 2, 3]                             // ✅ 正确

报错长这样:

javascript 复制代码
SyntaxError: Unexpected token , in JSON at position 18

为什么老中招:JavaScript 是允许尾逗号的(ES2017 之后数组、对象、函数参数都可以),所以从 JS 里复制数据到 JSON、或者手写时顺手加个逗号,特别容易踩。

错误二:单引号

JSON 的字符串和键只能用双引号,单引号一律非法:

json

arduino 复制代码
{ 'name': 'Tom' }        // ❌ 单引号
{ "name": "Tom" }        // ✅ 双引号

报错通常是 Unexpected token ' 或者 Unexpected string。很多同学是从 Python/JS 的习惯带过来的,一不注意就写了单引号。

错误三:注释

JSON 标准不支持任何注释 ,// 和 /* */ 都会报错:

json

json 复制代码
{
  "name": "Tom"   // 用户姓名        // ❌ 注释
}

想给 JSON 加说明,只有两条路:把说明写进字段值,或者改用支持注释的 JSON5 / JSONC 格式(VS Code 的 settings.json 用的就是 JSONC)。

错误四:键没有加双引号

对象的键必须是双引号包裹的字符串:

json

json 复制代码
{ name: "Tom" }          // ❌ 键没加引号
{ "name": "Tom" }        // ✅ 正确

这个错误和错误二经常一起出现------都是从非 JSON 语境复制过来导致的。

错误五:非法值类型

JSON 只认 6 种类型,这些 JavaScript 里的值放进 JSON 都会出问题:

json

javascript 复制代码
{ "n": NaN }             // ❌ NaN
{ "u": undefined }       // ❌ undefined
{ "fn": function(){} }   // ❌ 函数
{ "d": new Date() }      // ❌ Date 对象

遇到这些值,需要先手动转成 JSON 支持的表示------NaN 转 null,Date 转成 ISO 字符串,函数直接丢掉。

怎么快速定位错误,而不是肉眼找

上面 5 类错误,我写的都是「正确/错误对照」,但真实场景里你面对的是几百行挤在一起的 JSON,肉眼找真的会崩溃。

我的做法是:把 JSON 粘到 JSON 常见错误排查工具 里,它会直接告诉你错误在第几行第几列、具体是什么原因------比如「第 8 行第 15 列:多余的逗号」。比自己一行行数快得多,尤其是排查接口返回的长 JSON 时。

顺带说一句,这个工具是我自己写的(个人练手项目),数据全程在浏览器本地解析,不上传服务器,所以粘生产环境的返回数据也不用担心泄露。目前功能还不全,如果你用着有哪里不顺,欢迎直接在评论区告诉我,每条都会看。

小结

错误 一句话记忆
尾逗号 最后一个元素后面不加逗号
单引号 键和字符串一律双引号
注释 JSON 里没有注释
键不加引号 键必须带双引号
非法值 只认 6 种类型

记住这 5 条,JSON 报错的 90% 都能秒懂。如果你还遇到过其他诡异的 JSON 报错,欢迎评论补充,我攒够一批再写一篇。

相关推荐
weixin_4407305012 小时前
内置函数、json文本、pickle二进制
开发语言·python·json
念越15 小时前
接口自动化测试从入门到实战:接口用例设计、Requests、Pytest、YAML、JSON Schema 与 Allure 报告
python·测试工具·自动化·json·pytest
福兮说2 天前
前后端算的 MD5、SHA-256 对不上?编码、换行、BOM、HMAC、JSON 顺序,八个原因逐个实测
前端·javascript·node.js·json·哈希算法
网络毒刘2 天前
MCP 从 0 接入 Cursor:mcp.json 安装配置到最小调用与常见报错
json
小小龙学IT2 天前
Go 语言 encoding/json 标准库深度解析:从 Tag 反射到流式处理
golang·json
李游Leo3 天前
HarmonyOS 7 + Node.js-JSON Schema:审核测试路径与版本事实的一致性门禁【鸿蒙心迹】
node.js·json·harmonyos
ha_lydms4 天前
MaxCompute中JSON函数
大数据·数据库·阿里云·json·dataworks·maxcompute·odps
LeoCrawls4 天前
Python 读取 JSON 常见报错排查,附完整处理函数
python·json·php
星河耀银海5 天前
数据解析:AI返回JSON数据在HTML5中的渲染方法
人工智能·json·html5
三8445 天前
Fastjson 漏洞 · 01 · 认识 Fastjson 与序列化基础
json·fastjson·反序列化