JSON 在线解析与 JSON 格式化工具:粘贴就自动校验,报错直接给出第几行第几列和中文原因(缺逗号、多余逗号、引号不配对、键没加引号、注释……)。一键格式化美化、压缩成一行、按键排序、转义与去转义,树视图可折叠、点键名复制路径;大数字按原文保留不丢精度,支持 JSONL 逐行校验与宽松修复。全部在本机浏览器里处理,不上传。
怎么用
这是一个在线 JSON 解析与 JSON 在线格式化工具:JSON 解析、校验、格式化、压缩、转义一页做完,也就是常说的 JSON 在线解析格式化;这个 JSON 格式化工具在线打开就能用,不用下载安装。页面顶部常驻一句说明:JSON 在线解析的全部工作都在你这台设备的浏览器里完成,不上传、不联网,输入的内容也不保存,刷新就清空。本机只记住缩进、宽松修复、布局三项设置。
一、粘贴就校验
把 JSON 粘进左边(手机上是上面)的输入框,停手约三分之一秒就自动校验一次,状态行会告诉你「合法」还是「第几行第几列有错」。边打字边校验不会挪动你的光标,也不会改你输入框里的内容。想看效果可以先点「示例」。
二、六个按钮
- 格式化:按层级换行缩进,也就是常说的 JSON 美化,在线 JSON 格式化最常用的就是这一下。缩进可选 2 空格、4 空格或 Tab。按 Ctrl+回车(Mac 上 ⌘+回车)也能格式化。
- 压缩:去掉所有空白压成一行,状态行会告诉你从多大压到多大。JSON 压缩适合贴进配置项、写进日志或接口请求体。
- 校验:只检查、不改结果区,适合只想确认「这段是不是合法 JSON」的时候,也就是 JSON 格式校验。
- 排序键:把每一层对象的键按名字排序后再格式化,数组的顺序不动。两份 JSON 想肉眼比对时先各自排一遍,差别会好找很多。
- 转义:把整段内容当成一个字符串包一层,引号变
\"、换行变\n、反斜杠变\\,结果可以直接塞进另一段 JSON 的字符串字段或代码里。两边的双引号按需要自己加。 - 去转义:反过来剥掉一层。输入两边带双引号或不带都认;剥完如果正好是合法 JSON,会顺手格式化好。
点过「格式化」「压缩」「排序键」之后再改输入框,结果区会按同一个动作自动刷新。结果区右上角有复制和下载 .json,下载的文件也是在本机现生成的。
三、树视图
结果区顶上切到「树视图」,JSON 会变成一棵可以折叠的树:每个节点显示键名、类型,对象和数组后面标着有几项。点任意键名,就把它的路径复制走,写法是 $.items[0].sku 这种,键名里有空格或中文时写成 $["键 名"]。节点超过 5000 个时默认只展开两层,其余的点三角逐层打开。
四、宽松修复与 JSONL
- 勾上宽松修复,能把单引号、尾逗号、注释、没加引号的键、中文逗号冒号引号、全角空格、Python 的 True/False/None 修成标准 JSON,下面会列出「改了哪几类、各在第几行第几列」。它只改结果,不动你输入框里的原文。
- 「输入类型」切到 JSONL,就按一行一条逐行校验,报错会说是第几行;「格式化」把所有记录合成一个 JSON 数组,「压缩」保持一行一条。
五、左右还是上下
「布局」按钮在电脑上切换左右两栏或上下两栏,手机上总是上下排。
怎么看结果
状态行与报错卡
合法时状态行是绿色的「校验通过」或「已格式化」。有错时变红,下面出现一张报错卡:
- 第一行是位置+原因,比如「第 3 行第 5 列:缺逗号:上一个键值对后面要加英文逗号 , 才能接下一个」。行和列都从 1 数起,列按字符数。
- 第二行把出错的那一行原样摆出来,出错的字符用红底标出;点「在输入框里定位」,输入框会直接选中那个字符并滚过去。点「校验」「格式化」这些按钮时也会自动定位。
常见原因与改法:
| 报错说的 | 通常是 | 怎么改 |
|---|---|---|
| 缺逗号 | 两项之间忘了逗号,或上一行少了个右引号把逗号吞了 | 在上一项末尾补英文逗号 |
| 多余的逗号 | 最后一项后面还留着逗号 | 删掉那个逗号,或开宽松修复 |
| 字符串没有闭合 | 少了右引号,或字符串里直接敲了回车 | 补右引号;要换行写成 \n |
| 键名没加引号 | 从 JS 代码里复制来的 | 键名两边加双引号,或开宽松修复 |
| 单引号/中文引号 | JSON 只认英文双引号 | 换成 ",或开宽松修复 |
| 非法转义 | 反斜杠后面跟了不认识的字母,常见于 Windows 路径 | 反斜杠要写成两个 \\ |
| 内容意外结束 | 没复制全,最后缺了 } 或 ] |
报错会说是哪一行的括号没闭合 |
| 根值后面还有多余内容 | 两段 JSON 连在一起 | 放进一个数组,或切到 JSONL |
报错位置有时比真正写错的地方晚一点:解析器是读到「不对劲」的那个字符才停下的,比如少了右引号,往往要到下一行才发现。所以看报错时,把报的那个位置和它前面一两行一起看。
统计
结果下面有一排读数:字符数(emoji 算一个)、字节数(按 UTF-8 算,一个汉字 3 字节,是文件存盘或网络传输的真实大小)、层数(嵌套最深几层,纯数字或字符串是 0 层)、键数(所有对象里的键加起来)、节点数(一共多少个值)。层数超过十几层、键数成千上万都不算异常,接口数据常见这么大。
两种提醒
- 「有 N 个数字超出 JS 能精确表示的范围」:数据本身没问题,本页也按原文保留了;要提防的是你自己的程序用 JSON.parse 读它时会丢精度。
- 「有 N 处同一对象里键名重复」:标准没禁止,但多数程序只认最后一个,前面的等于白写,通常是拼数据时出了错。
复制给 AI
有报错时,报错卡下面会出现「复制给 AI」。它只复制行列、原因和出错处前后各 40 个字符,不带整段 JSON。
常见问题
格式化和压缩各用在什么地方?
格式化给人看:排查接口返回、读配置、写文档时用,层级一目了然。压缩给机器用:放进请求体、存数据库字段、写进一行日志时用,能省掉所有空白。两者内容完全等价,本页在两者之间来回切换不会改动任何一个值。
JSON 和 JSONL 有什么区别?
JSON 是一整段只有一个顶层值;JSONL(JSON Lines,也有人叫 NDJSON)是一行一条独立的 JSON,文件扩展名常见 .jsonl。它的好处是可以一边写一边追加、一行一行地读,日志、导出的数据集、AI 训练数据常用这种格式。直接把 JSONL 当 JSON 解析会报「根值后面还有多余内容」,切到本页的 JSONL 模式就能逐行校验。jsonl 文件怎么打开:它也是纯文本,任何编辑器都能打开,粘到这里可以逐行检查。
为什么大数字会丢精度?
JavaScript 只有一种数字类型:64 位双精度浮点数,能精确表示的整数上限是 9007199254740991。超过这个数,相邻两个能表示的整数之间开始有间隔,读进来就被就近舍入。JSON 标准本身不限制数字长度,所以数据没错,错在读它的那一方。本页全程不把数字转成 JS 数字,格式化、压缩、排序都原样输出。
转义和去转义是干什么的?
把一段 JSON 当作字符串塞进另一段 JSON 或代码里时,里面的双引号、反斜杠、换行都要加反斜杠,这就是 JSON 转义;拿到一段满是 \" 的文字想还原回来,就是去转义。本页的转义结果与 JavaScript 的 JSON.stringify 对字符串的写法逐字一致。
原理与冷知识
本页的解析器怎么工作
本页没有直接调用浏览器自带的 JSON.parse,而是自己写了一个解析器:从头到尾逐个字符读,心里记着「现在该出现什么」——对象刚开头时该是键或 },键后面该是冒号,值后面该是逗号或收尾括号。一旦读到的字符和预期对不上,就按「当时在等什么」加上「实际来了什么」去猜最可能的原因:在等逗号时来了一个引号,多半是缺逗号;在等键时来了 },前面又刚有个逗号,就是多余的逗号。它用的是显式的栈而不是递归,嵌套十万层也不会把浏览器的调用栈撑爆。
为了保证它和浏览器自带的解析一样严格,单元测试里拿几千份随机生成、再随机改坏的样本逐份对拍:判「合法还是不合法」必须和 JSON.parse 完全一致,合法时解析出来的值也必须一致。
JSON 的规则其实很少
完整的 JSON 语法一页纸就能写完:六种值、两种括号、逗号与冒号、字符串只能用双引号、反斜杠后面只能跟八种字符或 \u 加四位十六进制、数字不能以 0 开头也不能带加号。没有注释、没有尾逗号、没有 undefined,这些「不方便」正是它被各种语言轻松支持的原因。想要注释和尾逗号的人后来另外搞出了 JSON5 这样的扩展格式,但它和 JSON 不是一回事,多数程序不认。
空白只认四种
JSON 里能当空白的只有空格、Tab、换行、回车四种。从网页或聊天软件复制来的内容里常夹着全角空格、不换行空格或零宽字符,肉眼看不出来,解析却会失败。本页遇到这几种会单独报「这里有一个全角空格」或「看不见的字符」,宽松修复也会顺手换掉。
键名可以重复吗
标准只说键名「应该」唯一,没有禁止。实际上几乎所有程序遇到重复键都只留最后一个,所以前面那个值会悄悄丢掉。本页格式化时两个都原样保留,同时在状态行提醒你一句。