如何诊断JSON数据常见错误?基于报错信息的排查清单需求
疑似JSON数据问题排查清单
一、"Unexpected token X at position Y" 类报错
- 报错核心内容:明确指出在指定位置(Y)出现了不符合JSON规范的符号(X)
- 常见诱因:
- 字符串/键名未用双引号包裹(比如用单引号
'key',或直接裸写key: value) - 基础类型拼写错误(比如
tru、12.3.4、nll这类不合法的布尔/数值/空值写法) - 结构末尾多写逗号(比如数组
[1,2,3,]、对象{"a":1, "b":2,}的结尾逗号) - 混入非JSON语法(比如
// 注释、/* 注释 */,或者函数定义function(){}))
- 字符串/键名未用双引号包裹(比如用单引号
- 排查方法:
- 用文本编辑器定位到位置Y(注意多数工具的计数从0开始),直接查看对应字符
- 若符号是单引号,全局替换为双引号后再验证
- 检查多余逗号所在的数组/对象结尾,确认是否多写了分隔符
二、"Unexpected end of JSON input" 类报错
- 报错核心内容:提示JSON数据结构不完整,未正常结束
- 常见诱因:
- 字符串未闭合(比如
{"name": "Alice,缺少结尾双引号) - 数组/对象未闭合(比如
{"data": [1,2,缺少右括号]和右大括号}) - 数据被截断(传输丢包、文件保存不完整、复制时漏选内容)
- 字符串未闭合(比如
- 排查方法:
- 直接查看数据末尾,检查是否有未闭合的括号、引号
- 用本地格式化工具尝试自动补全,看补全位置是否符合逻辑
- 对比原始来源,确认是否存在传输/保存环节的内容丢失
三、"Duplicate key 'X'" 类报错
- 报错核心内容:提示对象中存在重复的键名X
- 常见诱因:
- 手动编写时重复输入同一键(比如
{"id":1, "id":2}) - 生成工具逻辑错误,重复输出同一键名
- 手动编写时重复输入同一键(比如
- 排查方法:
- 全局搜索键名X,定位所有出现的位置
- 检查重复键的上下文,保留正确的键值对,删除无效项
四、"Invalid JSON primitive" 类报错
- 报错核心内容:提示存在JSON不支持的基础类型内容
- 常见诱因:
- 出现JSON禁用类型(比如
undefined、NaN、Infinity) - 裸写非合法基础值(比如单独的
test不合法,必须用双引号包裹为字符串)
- 出现JSON禁用类型(比如
- 排查方法:
- 搜索报错中提到的原始值,确认是否属于JSON支持类型(字符串、数字、布尔、null、数组、对象)
- 将
undefined替换为null,NaN/Infinity替换为合法数字或字符串形式
五、无明确报错但解析结果异常(丢数据、结构混乱)
- 表现:工具未抛出错误,但解析后内容和预期不符
- 常见诱因:
- 混入隐藏字符(全角空格、不可见控制字符)
- 编码不匹配(数据是GBK等编码,但解析工具默认用UTF-8读取)
- 嵌套结构层级错误(数组和对象嵌套逻辑混乱)
- 排查方法:
- 开启文本编辑器的显示隐藏字符功能,排查异常字符
- 将文件编码转换为UTF-8后重新解析
- 用本地格式化工具格式化数据,直观检查嵌套结构是否合理
通用排查步骤
- 将疑似JSON数据保存为临时文件(比如
temp.json) - 用命令行工具快速验证:比如
python -m json.tool temp.json或jq . temp.json,终端会直接输出报错位置和原因 - 若工具无法解析,先手动检查基础语法:所有键用双引号、字符串用双引号、无多余逗号、结构完全闭合
内容的提问来源于stack exchange,提问作者Karl Knechtel
相关产品推荐
相关产品推荐

