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 支持的表示------NaNnullDate 转成 ISO 字符串,函数直接丢掉。

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

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

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

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

小结

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

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

相关推荐
代码什么用1 分钟前
JSON一文速通
java·json
小小测试开发17 小时前
LLM 结构化输出测试:Schema 契约 + 故障注入,让工具调用的 JSON 不再靠重试赌运气
人工智能·json
hasty19 小时前
_proto__ 不是普通键:从 JSON 反序列化看原型污染
安全·json
代码中介商1 天前
JSON 完全指南:从语法到项目实战
json
名字还没想好☜1 天前
Go 用 json.Decoder 流式解析大 JSON:边读边处理不爆内存
开发语言·后端·golang·go·json
gf13211111 天前
【python_发送飞书卡片消息_直接组装JSON格式发送卡片】
python·json·飞书
有梦想的咕噜1 天前
Newtonsoft.Json (Json.NET) 常用方法汇总
linux·json·.net
数据狐(Datafox)2 天前
京东商品列表API接口解析(附 JSON 样例)
数据库·爬虫·json
mengzhi啊3 天前
缓存类CacheDataManager把临时数据存入json。做成插件·
qt·缓存·json
golang学习记3 天前
Go 1.27新特性: json/v2使用有趣指南
开发语言·golang·json