JSON 解析失败时程序报出的英文提示往往看不懂。这里整理了 12 种最常见的错误写法:报错信息、错误示例、修复方法一一对应。查不到答案时,可把内容粘贴进 免费在线 JSON 校验工具,直接指出出错的行列(本地处理,不上传)。
报错 Unexpected token a in JSON… / A string key must be followed by ':'
{name: "张三", age: 20}{"name": "张三", "age": 20}JSON 的键和字符串值都必须用英文双引号包裹,这与 JavaScript 对象字面量不同。
报错 Unexpected token '
{'name': '张三'}{"name": "张三"}从聊天工具、Word 里复制内容时最容易带入全角引号,肉眼很难分辨。
{“name”: “张三”}{"name": "张三"}报错 Unexpected token } in JSON at position …
{"list": [1, 2, 3,], "a": 1,}{"list": [1, 2, 3], "a": 1}手写或从 JS 代码复制时很常见:JS 允许尾随逗号,JSON 不允许。
报错 Expected ',' or '}' after property value
{"a": 1 "b": 2}{"a": 1, "b": 2}报错 Unexpected end of JSON input
{"a": [1, 2{"a": [1, 2]}常见于复制不完整、接口返回被截断、日志行太长被编辑器截掉尾部。
{"users": [{"id" = 1}]}{"users": [{"id": 1}]}报错 JSON number numbers may not start with 0
{"port": 08080, "n": +5}{"port": 8080, "n": 5}Python 的 True/False/None、JS 的 undefined 都不是合法 JSON 值。
{"ok": True, "x": undefined, "y": None}{"ok": true, "y": null}报错 Unexpected token / in JSON…
{
// 端口号
"port": 8080
}{"port": 8080}JSON 标准不支持注释。若确实需要注释,请改用 JSONC / YAML / TOML,并确认读取端支持。
报错 Bad control character in string literal
{"msg": "第一行
第二行,他说"你好""}{"msg": "第一行\n第二行,他说\"你好\""}换行要写成 \n,引号要 \\" 转义,反斜杠本身要写两条 \\\\。
报错 Unexpected token \ufeff in JSON…,内容看起来完全正常却解析失败。
Windows 记事本保存的 UTF-8 文件常带 BOM。用支持「另存为 UTF-8(无 BOM)」的编辑器重存,或粘贴到校验工具里由它指出首字符问题。
文本被截断了:缺少闭合的花括号或方括号,或内容只写入了一半(复制不完整、接口返回中断都常见)。补全结尾的括号即可。
JSON 标准不允许最后一个成员后还有逗号,如 [1,2,3,] 或 {"a":1,}。删掉末尾多余的逗号即可。
JSON 不支持 // 或 /* */ 注释。要么删掉注释,要么改用支持注释的格式(JSONC、YAML、TOML),取决于程序是否接受。
用本站的在线校验工具,实时解析并标出出错行列;全程在浏览器本地完成,敏感内容不会上传。