JSON 格式化怎么用?在线校验、美化与报错排查完整指南
从日志、接口响应或数据库里粘出来的 JSON,往往挤成一行或者缩进全乱,想找一个字段要来回翻半天。格式化能让结构一眼看清,语法出错时还会直接告诉你错在哪一行。
- 格式化和校验是同一件事:工具必须先把文本按 JSON 语法解析一遍才能重排缩进,能排版就说明语法合法
- 格式化只改变空白字符(缩进、换行),键、值、数字精度、数组顺序都不受影响
- 报错位置指向「第 1 行第 1 列」时,几乎都不是语法问题,而是内容根本不是 JSON(比如接口返回了 HTML 错误页)
- 键名必须用双引号 —— 这是从其他语言改数据时最常见的报错来源
- 全部解析在你自己的浏览器里完成,内容不会上传到服务器
#为什么先格式化再改数据
从日志、接口响应或数据库字段里复制出来的 JSON,通常有三种状态:压成一行、缩进混乱、或者转义嵌套了多层。这三种状态下直接改数据都容易出错 —— 多删一个括号、漏掉一个逗号,整段就解析不了,而报错信息往往只说「第 1 行有意外字符」,等于没说。
格式化的作用是把这两件事分开做:先用机器确认结构是合法的,再用人眼看清层级关系。多花的这几秒,通常会省下后面十几分钟的排查。
打个比方,这就像改代码前先让编译器跑一遍 —— 语法错误当场暴露,而不是等到运行时才发现。
#三步完成格式化与校验
- 打开 JSON 格式化校验工具,把 JSON 粘贴到左侧输入框。
- 点击格式化。合法的话,输出区会给出带缩进的结构;不合法的话,会直接提示错误位置和原因。
- 确认无误后点复制,粘回你的代码或配置文件。
格式化和校验其实是同一件事的两面:工具既然要重新排出缩进,就必须先把整段文本按 JSON 语法解析一遍 —— 解析能通过,就说明语法合法;解析失败,就说明有语法错误。所以你不需要先「校验」再「格式化」,一次操作两个结果都有了。
输入框支持直接拖入 .json 文件,几百 KB 的配置和接口响应不用手动复制粘贴。
#报错信息看不懂?逐条对照
工具给出的报错关键字是固定的几种。下表把「报错原文 → 真正的原因 → 修改示例」放在一起,方便直接对照:
| 报错关键字 | 真正的原因 | 错误示例 | 改法 |
|---|---|---|---|
Unexpected token | 出现了 JSON 不允许的写法,最常见是键名没加双引号、用了单引号,或者出现函数、undefined、注释 | {name: 'Tom'} | {"name": "Tom"} |
Unexpected end of input | 括号或引号没闭合,通常是复制时漏了尾部 | {"a": 1 | {"a": 1} |
Unexpected token } in JSON | 多了一个逗号 —— 末项后面跟了 , | {"a": 1, "b": 2,} | {"a": 1, "b": 2} |
Bad control character | 字符串里混进了真实的换行或制表符 | 字符串内直接回车换行 | 写成 \n、\t |
Unexpected token ' in JSON at position 0 | 文件开头有 BOM,或者内容其实是 HTML、报错页 | 文件头有不可见字符 | 另存为「UTF-8 无 BOM」 |
下面逐个看实际的错误与修正对照。
多余逗号(从其他语言改数据时最容易犯):
{
"name": "张三",
"age": 30,
}上面会报 Unexpected token } in JSON。删掉 30 后面的逗号即可:
{
"name": "张三",
"age": 30
}键名没有双引号(JavaScript 对象可以,JSON 不行):
{ id: 1, "name": "Alice" }改成 { "id": 1, "name": "Alice" } 就合法了。
当报错位置指向「第 1 行第 1 列」时,几乎都不是语法本身的问题,而是内容根本不是 JSON —— 比如接口返回了 HTML 错误页、或者把 YAML 当成了 JSON。
#什么时候该换另一个工具
JSON 相关的工具不止一个,按目的选能省不少事:
| 你想做的事 | 用哪个 | 说明 |
|---|---|---|
| 美化缩进、检查语法 | JSON 格式化校验 | 最常用,先过这一关 |
| 在深层嵌套里找字段 | JSON 视图查看器 | 树形折叠展开,几十层嵌套时比文本滚动快得多 |
| 把 JSON 塞进 URL 或配置项 | JSON 压缩转义 | 去掉所有空白并转义成一行,也能反向还原 |
| 写 YAML 配置 | JSON 转 YAML | 双向转换,保留嵌套与数组结构 |
| 根据接口返回生成代码 | JSON 生成实体类 | 一次生成 Java、TypeScript 或 Go 的类定义 |
判断标准很简单:要「看懂结构」就用格式化或树形视图,要「换个格式」就用转换类工具。
#三个省时间的技巧
#先格式化,再搜索字段
在压成一行的 JSON 里搜索字段名,结果只有一列;格式化之后每层一行,搜索结果会自然带上缩进,父级关系一眼可见。字段名重复较多次时,这个差别很明显。
#大文件不要反复全量格式化
几百 KB 以上的 JSON 每次格式化都要完整解析一遍。如果只是改一两个字段,改完再格式化一次就够了,不要来回切换 —— 真正需要反复折叠查看的话,直接用树形视图更合适。
#顺手确认编码
中文出现乱码时,问题往往不在 JSON 本身,而在编码。确认源文件是 UTF-8,并且没有 BOM。JSON 标准要求用 UTF-8,其他编码的字符即使语法合法也可能显示异常。
编码问题的一个常见表现是:JSON 合法、能格式化,但中文全变成 锟斤拷 之类的乱码 —— 这几乎一定是源文件被存成了 GBK。
#常见问题
#在线格式化 JSON 会不会把我的数据上传?
不会。这个工具在你自己的浏览器里完成全部解析和格式化,粘贴的内容不会被发送到服务器,关闭页面后数据就没了。你可以打开浏览器的开发者工具网络面板自己确认:格式化过程中没有任何请求发出。这也是本站除「在线运行」以外的工具统一的做法。
#格式化会不会改变数据本身?
不会。格式化只调整空白字符 —— 缩进、换行和空格。键、值、数字精度、数组顺序都不受影响。这也是为什么格式化之后可以放心把结果粘回代码里:解析出的对象和原来完全等价。
#多大的 JSON 文件能处理?
几 MB 以内的文件在浏览器里通常都能处理,具体上限取决于你电脑的内存。不过文件越大,浏览器的响应会越慢,超过十几 MB 建议改用命令行工具。日常的接口响应、配置文件基本都在几百 KB 以内,浏览器完全够用。
#JSON 和 JavaScript 对象有什么区别?
JSON 是数据交换格式,JavaScript 对象是语言里的数据类型,两者写法相似但规则不同。
JSON 的键名必须用双引号,不能有注释、函数、undefined 和尾随逗号;而 JavaScript 对象这些都允许。所以从代码里直接复制对象字面量去当 JSON 用,经常就报 Unexpected token —— 反过来,合法的 JSON 一定是合法的 JavaScript 对象字面量。
#数字精度会丢失吗?
大整数可能丢精度。JSON 标准没有规定数字长度,但 JavaScript 内部用双精度浮点数表示数字,超过 2^53 的整数在解析时可能被改写。如果数据里有长整型 ID(例如雪花算法生成的 19 位 ID),格式化后要核对一下末尾几位;这类字段在传输时通常建议用字符串保存。