JSON 常见错误
这篇文章专门讲两类问题:JSON 语法错误,以及在各语言里调用 JSON 解析方法时最常见的报错。
很多人以为“JSON 很简单”,直到接口上线后才发现解析报错在日志里刷屏。
JSON 的问题通常不难,但定位顺序很关键:先确认输入是不是合法 JSON,再看语言层的类型映射与解析参数。
你可以把这篇当作排错手册,遇到问题时按章节逐条对照。
一、最常见的 JSON 语法错误
1) 键没有用双引号
JSON 要求对象键必须是双引号字符串,`name`这种写法只在 JavaScript 对象字面量里合法。
- JavaScript: SyntaxError: Unexpected token n in JSON at position 4
- Python: JSONDecodeError: Expecting property name enclosed in double quotes
2) 最后一个键值对后面多了逗号
尾逗号在很多语言的对象字面量里能通过,但在 JSON 里不允许。
- JavaScript: SyntaxError: Unexpected token } in JSON at position ...
- Go: invalid character '}' looking for beginning of object key string
3) 使用了单引号
JSON 字符串只能用双引号,单引号会被视为非法字符。
- JavaScript: SyntaxError: Unexpected token ' in JSON at position ...
- PHP: JsonException: Syntax error
4) 加了注释
标准 JSON 不支持`//`或`/* */`注释。
- JavaScript: SyntaxError: Unexpected token / in JSON at position ...
- Python: JSONDecodeError: Expecting property name enclosed in double quotes
5) 字符串中的引号没有转义
字符串中出现双引号时必须转义,否则会提前结束字符串。
- JavaScript: SyntaxError: Unexpected token h in JSON at position ...
- Python: JSONDecodeError: Expecting ',' delimiter
二、各语言调用 JSON 解析方法时的常见错误
JavaScript
JSON.parse(payload)常见报错:逻辑错误:`data.age`是字符串,拼接时可能得到`"181"`。
根因:JSON 解析本身成功了,但业务字段类型与你的计算预期不一致。
修复建议:解析后先做类型校验与转换,例如`Number(data.age)`。
Python
json.loads(payload)常见报错:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes
根因:输入用了单引号,不是合法 JSON。
修复建议:确保输入是标准 JSON 格式,键和值字符串都使用双引号。
Java(Jackson)
new ObjectMapper().readTree(payload)常见报错:com.fasterxml.jackson.core.JsonParseException: Unexpected character ('}' ...)
根因:尾逗号导致 JSON 语法非法。
修复建议:去掉尾逗号;必要时把原始入参完整打印,先在解析器里验证。
Go
json.Unmarshal(data, &dst)常见报错:json: cannot unmarshal string into Go struct field User.age of type int
根因:JSON 里`age`是字符串,但结构体字段定义为`int`。
修复建议:统一字段类型;或者先用`map[string]any`接收后再转换。
C#(.NET)
JsonSerializer.Deserialize<T>(json)常见报错:The JSON value could not be converted to System.Int32. Path: $.age ...
根因:目标模型字段是数值,输入却是字符串。
修复建议:修正接口字段类型,或在反序列化前后做显式转换。
PHP
json_decode($json, true, 512, JSON_THROW_ON_ERROR)常见报错:JsonException: Syntax error
根因:输入 JSON 有语法问题(此例为尾逗号)。
修复建议:捕获异常并记录原始 JSON,再用解析工具先做语法校验。
三、快速排错清单
- 先验证原始字符串是不是合法 JSON,不要直接猜业务逻辑。
- 确认字段类型是否和目标模型一致,特别是数字、布尔、时间、null。
- 解析失败时记录完整报错、行列位置、请求 ID 和原始片段。
- 接口联调阶段约定字段契约,避免同名字段在多服务里语义不同。
- 对外接口加 Schema 校验,尽量把错误拦截在入口层。
四、建议的自检动作
遇到报错先把原文贴进本站“json 在线解析”,先定位语法,再回到业务代码修复。
打开 json 在线解析JSON 问题最怕“边猜边改”。
按“语法合法性 -> 字段类型 -> 业务语义”三步走,定位速度会快很多。