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 报错,欢迎评论补充,我攒够一批再写一篇。

相关推荐
九英里路5 小时前
protobuf快速上手
网络·c++·中间件·json·谷歌·序列化·protobuf
wuyk55518 小时前
Spider-第09讲-三格式落盘CSV-Excel-JSON
爬虫·python·json·excel
wuyk5552 天前
Spider-第07讲-JSON接口与正则提取
爬虫·python·json
xbzb4 天前
镜像到底存在哪:/var/lib/docker 的四级映射与 daemon.json 配置
docker·容器·json·镜像·daemon.json·四级
坤坤子吖5 天前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json
code2cat5 天前
【随笔】结构化输出:JSON格式过关,业务数据就能入库吗
json·大语言模型
Hello_Pyhx9 天前
NWinfo 导出 Windows 硬件信息:从 JSON 报告到缺项排查
windows·json
程序员大阳9 天前
副队长JavaScript教程(66)-本地存储实战:待办事项网页的开发
javascript·json·实战·待办事项·本地存储·案例
视觉小萌新10 天前
AI Class 3 · Chapter 2-3:函数、异常、文件读写+JSON / JSONL 读写(小白版)
人工智能·python·json
翊众建站11 天前
用 JSON-LD 给企业官网做结构化数据:LocalBusiness 与 FAQPage 实践笔记
人工智能·搜索引擎·json