JSON 格式化报错别急着改数据:6 种不合规写法的排查顺序
接口返回一坨压缩过的 JSON,粘进格式化工具只得到一句「Unexpected token」或者干脆一片空白。多数时候数据本身没错,只是它写得不够「标准」——从配置文件、日志、前端对象字面量里复制出来的 JSON,几乎都带点人类写作习惯。
下面按遇到频率排一下,从最常见的开始查。查的顺序有讲究:先看结构,再看引号,最后才怀疑值。
一、先确认错在第几行第几列
「解析失败」这四个字没有信息量。好的工具会指出行列位置,这决定了后面是逐字符找,还是直接看某一处。
常见的三类错误位置:
- 指向开头第一个字符:多半是粘进了 BOM、日志前缀,或者把
{前面的说明文字一起复制了; - 指向某个键名后面:引号或冒号的问题;
- 指向最后一个
}附近:多余逗号没删干净。
拿到行列号再动手,比从头读一遍快得多。
二、键名没加双引号
从 JavaScript 对象字面量直接复制过来的片段,最常见就是这种:
{name:"小花", tags:["JSON"], age:18}
标准 JSON 要求键名必须是双引号字符串。这几个键一个都没加,严格解析器会直接拒掉,但人眼看着完全没毛病——因为 JS 里就是这么写的。
修正后是 {"name":"小花","tags":["JSON"],"age":18}。有些工具会自动补引号并提示改了哪些地方,这种「宽松容错」在读接口片段时确实省事,但要注意:它只是把不严格的写法转成合法 JSON,不会替你猜业务含义。
三、字符串用了单引号
{'status': 'ok', 'msg': 'done'}
单引号是 Python、JS 里最常见的写法,JSON 规范不认。修正时不只是把 ' 换成 ",字符串内部的转义也要跟着还原再重新转义。比如 'it\'s ok' 应变成 "it's ok",简单粗暴地全局替换会留下一个反斜杠。
四、注释和结尾多余的逗号
配置文件里带注释、数组最后多一个逗号,都是写给人看的习惯:
{
"port": 8080, // 本地调试端口
"hosts": ["a", "b",],
}
JSON 不允许注释,也不允许尾逗号。删掉注释行、去掉 ] 和 } 前那两个逗号就好。注意 // 出现在字符串里是正常的(比如 URL),别用全局搜索一把梭,误伤字符串内容比多一个逗号麻烦得多。
五、前导零、特殊数字和大整数
这几类属于「能解析,但结果会变」的坑,比直接报错更隐蔽:
007这类前导零数字,标准里不合法;编号、工号里很常见,直接按数字解析会丢零,稳妥的做法是当字符串保留;+1、.5、0x1f这类写法在 JS 里合法,在 JSON 里不合法;- 超过 JavaScript 安全整数范围的大整数(比如某些雪花 ID),一旦被转成 Number 再格式化,末尾几位可能就变了。
如果数据里有订单号、身份证号、长 ID,格式化完要特意核对一次这些字段。好的实现会原样保留合法部分,包括大整数和 \u4e2d 这类转义,只动必要的格式。
六、确认格式化没改动字段值
最后再做一次对照:格式化本身只应该调整缩进、换行、键名引号,以及可选的键顺序。字符串内容、数字精度、转义字符都该原样保留。
要快速验证,可以把两段 JSON 放进对比工具,看差异清单是不是空的。这一步在改过配置文件、或者要提交给同事审查之前尤其值得做。
一个把容错写清楚的工具:本地工具箱
按上面这套顺序排查,本地工具箱的 JSON 格式化用起来比较顺手:左侧粘贴,右侧实时出结果,键名不带引号、单引号字符串、// 与块注释、结尾多余逗号、未加引号的值,都会自动补成合法 JSON,并在提示条里列出具体改了哪些地方。前导零的 007 会按字符串保留,避免编号丢零;字符串整体按原意搬运,里面出现逗号、冒号、括号都不会被误改。
几个实际用得上的细节:
- 支持键名正序/倒序排列、一键压缩成单行、复制和下载
.json文件; - 解析失败时会指出行列位置,而不是只丢一句「格式错误」;
- 整页在浏览器本地计算,输入内容不上传服务器,处理带 token 的接口片段时不用先脱敏;
- 页面免费、不用注册,也没有次数限制。
同站还有一组配套页:JSON 对比可以把左右两段 JSON 自动格式化后按字段逐个比对,缺字段、多字段、值不同分别标色,给出新增/删除/修改统计和可复制的差异清单;JSON 转 XML 与 XML 转 JSON 用同一套宽松容错,字段名变标签、@ 开头的字段变属性、数组变同名重复标签。
实操:一次把脏 JSON 收拾干净
- 打开 JSON 格式化,把片段粘到左侧。
- 看右侧结果和提示条,记下它替你补了哪些写法;如果报错,按提示的行列号回到第一步的顺序查。
- 需要交给同事时,用「排序」把键名统一成一致顺序,再点「压缩」得到单行版本,或直接「下载」成文件。
- 如果这份配置有前后两个版本,把两版分别粘进 JSON 对比,复制差异清单当改动说明。
- 要转成 XML 给老系统,直接在 JSON 转 XML 里粘贴同一段内容,不用先手动修一遍。
第 2 步的提示条值得多看一眼:它告诉你工具改了什么,也就等于告诉你原始数据哪里不合规,回头改源头配置时用得上。
常见问题
问:工具自动补了引号,会不会改动我的数据? 按这个页面的说明,只调整缩进、换行、键名引号与可选的键顺序,字段值一律不动;单引号字符串会改成双引号,转义还原后重新转义,显示效果与原意一致。
问:注释会被当成字符串内容吗? 不会,注释行按注释处理并移除。但字符串内部的 // 会原样保留,比如 URL 不会被误删。
问:需要登录或者付费吗? 不需要。绝大多数工具免费开放,只有站点里标注了「按次付费」的 AI 类功能收费,JSON 格式化不在此列。
问:手机上能用吗? 页面是响应式布局,手机上工具面板自动变成上下两栏,功能与桌面端一致。
小结
JSON 报错多数不是数据坏了,是写法太「人性化」。按行列定位 → 键名引号 → 单引号 → 注释与尾逗号 → 数字精度 → 值有没有被改动这个顺序走一遍,基本都能定位。把 JSON 格式化 和 JSON 对比 一起收进收藏夹,下次遇到脏数据两分钟就能收拾完,不用注册。