JSON 报错在哪一行?格式化与校验指南
调试接口时最难受的不是报错,是报错不告诉你错在哪:几千个字符挤成一行,浏览器只说一句 "Unexpected token in JSON at position 3826"。
先格式化,再定位——这是排 JSON 问题的固定顺序。
第一步:格式化,让错误精确到行列
- 打开 JSON 格式化,把整段 JSON 粘进去。
- 选缩进(2 空格 / 4 空格 / Tab 都行),点「格式化」。
- 如果 JSON 合法,你会得到一份带换行与缩进、能逐层看结构的文本;如果不合法,工具会直接告诉你出错的行与列——对着那个位置往前后各看几行,问题通常就在那里。
排完错再点「压缩」,就能得到发送用的单行版本;需要和上一次的 JSON 对比时,先勾上「键排序」,让键名顺序统一,diff 只会显示真正的改动。
这些写法不是合法 JSON
标准 JSON 比很多人以为的严格。下面几种在多行文本里"看着没问题",但都不是合法 JSON:
- 单引号:键和字符串都必须是双引号;
- 注释:JSON 不支持
//或/* */,带注释的配置文件是 JSONC 之类的方言; - 尾逗号:数组或对象最后一个元素后面不能有逗号;
- 中文标点:从文档里复制配置时最常见的坑,
,、"、:都不行; - 键名没有引号:
{name: "x"}不是 JSON,{"name": "x"}才是; - 字符串里有裸换行:字符串内换行必须写成
\n。
报错报在"上一行末尾、下一行开头"附近时,先怀疑这几项。
工具的边界
本工具只解析文本,不执行里面的任何内容,格式化和压缩都在你的浏览器里完成,内容不会上传。它按标准 JSON 校验——JSON5、带注释的 JSONC 本来就不是合法 JSON,会被判为语法错误,这是预期行为。
常见问题
格式化会改动我的内容吗
不会。格式化只调整空白与缩进,"压缩"只是去掉空白;勾选"键排序"只改变键的排列顺序,值一个都不动。如果你需要保持原始键序,就不要勾它。
为什么这段 JSON 在代码里能跑,到这里报错
不少语言和配置格式(JS 对象字面量、JSON5、YAML)比标准 JSON 宽松:允许单引号、尾逗号、注释、无引号键。能跑不代表是合法 JSON——接口传输用的必须是标准 JSON,报错时按上面的清单逐项排除。
支持带注释的配置文件吗
不支持,注释不是标准 JSON 的一部分。如果你的配置必须带注释,它就不能直接当 JSON 发给接口;可以先去掉注释再校验。
很大的 JSON 也能贴进去吗
工具没有声明大小上限,但它在浏览器内存里处理;几十 MB 级别的文件建议改用命令行工具(如 jq),浏览器里粘贴大文本本身就容易卡。
睿工具