JSON 格式化与校验工具

在浏览器中运行,不上传任何内容

格式化、校验和压缩 JSON。错误会精确指出所在的行和列。

Input

Formatted JSON appears here as you type.

Ready
Ln 1, Col 1

格式化工具能做什么

JSON 是大多数 Web API 的请求体和响应体所使用的格式。服务器通常发送压缩过的 JSON,去掉了所有空格和换行,体积小但很难阅读。格式化(美化输出)会加上缩进,让你看清每个键属于哪个对象;压缩则再把缩进去掉。

要格式化 JSON,工具必须先解析它,所以格式化的同时也完成了校验。如果文本不是有效的 JSON,你会看到解析停止的行和列、那里本应出现什么,以及常见原因。注释、末尾多余的逗号、单引号、不带引号的键以及 Python 的 True/None 都可以自动修复:工具会先列出每一处改动,在你确认之前不会应用任何修改。

在这里格式化永远不会改变任何值。本工具使用自己的解析器而不是 JSON.parse,因此数字会保留原本写法中的每一位(12345678901234567890 和 1.50 保持不变),\u00e9 这样的转义仍是转义,重复的键也留在原处。如果文档中有 JSON.parse 会改变的数据,比如超过 2^53 的整数或出现两次的键,Inspector 会在 Data warnings 中列出来。

使用方法

  1. 1把 JSON 粘贴到 Input 面板,或把 .json 文件拖进去,也可以按 Ctrl+O 打开文件(最大 5 MB)。Examples 中有示例可以试用。
  2. 2Output 标签页会在你输入时实时显示结果。可以选择缩进(2 个空格、4 个空格或制表符)、对键排序,或在 Pretty 和 Minified 之间切换。行号旁的箭头可以折叠对象和数组。
  3. 3如果要直接改写输入内容,请使用 Format(Shift+Alt+F)或 Minify(Shift+Alt+M)。Ctrl+Z 可以撤销这两个操作,也能撤销 Clear 和已应用的修复。
  4. 4如果 JSON 无效,状态栏和 Output 标签页会显示出错位置。按 F8 把光标移到错误处,或点击 Review fixes 查看自动修复。
  5. 5Tree、Table、JSONPath 和 Compare 用不同方式展示同一份数据:在树中选中节点可复制它的路径或值,用 $.items[?(@.price < 10)].id 这样的表达式查询,或粘贴第二份文档列出差异。
  6. 6复制输出,或下载格式化或压缩后的结果(Ctrl+S)。按 ? 查看所有快捷键。

问题排查

末尾逗号:删除 } 前面的 ,
JSON 不允许在对象或数组的最后一项后面加逗号。删掉它,或使用 Review fixes。这通常来自 JavaScript 代码或手写的配置文件。
属性名必须使用双引号
这段文本是 JavaScript 对象字面量({name: 'x'}),不是 JSON。每个键和字符串都需要双引号。Review fixes 会帮你加上。
True 是 Python 的写法,JSON 使用 true
这些数据是用 Python 的 print() 或 str() 输出的。请用 json.dumps() 生成 JSON,或让 Review fixes 替换 True、False 和 None。
输入意外结束:第 1 行开始的对象没有闭合
文本在所有 { 和 [ 闭合之前就结束了。复制的响应很可能被截断了;请重新复制,或保存为文件后再打开。
JSON 值后面有多余的内容
这里有两个或更多连续的 JSON 值。把它们放进一个数组里;如果是按行分隔的 JSON(NDJSON)日志,请逐行检查。
文本以字节顺序标记(BOM)开头
文件被保存为“带 BOM 的 UTF-8”。很多解析器会拒绝开头这个看不见的标记。请另存为普通 UTF-8,或用 Review fixes 删除它。
字符串不能跨行
某个字符串里包含真正的换行,通常是粘贴了带换行的文本。把换行替换为 \n。
代码中的数字和 JSON 里的不一样
大于 9,007,199,254,740,991 的整数在 JavaScript 解析时会丢失精度,所以 19 位的 ID 可能会变。本工具按原样显示这些数字并给出警告;在你的 API 中,请把这类 ID 作为字符串发送。

常见问题

我的 JSON 会被上传吗?

不会。解析、格式化和所有视图都在你的浏览器标签页中运行。为了刷新后不丢失,粘贴的内容会保存在当前标签页的 session storage 中,直到你清除它或关闭标签页。Copy link 会把输入放在链接的 # 之后,浏览器从不把这部分发送给服务器,但拿到链接的人都能看到内容。缩进等设置会保存在当前浏览器中。

格式化会改变我的数据吗?

不会。所有值都按原样复制,包括大数字、转义和重复的键。只有两个选项会有意改变文本:Sort keys 会对键重新排序(按字符编码,所以大写字母排在小写字母前面),Minify 会删除字符串之外的空白。

重复的键会怎么处理?

它们会按原样保留并显示,同时给出警告。JSON 标准没有定义重复键的行为;JSON.parse 和大多数库只保留最后一个值,所以读取这份文档的代码很可能只能看到其中一个。Table、Compare 和 JSONPath 视图同样采用“最后一个生效”的规则。

支持哪种 JSONPath 语法?

支持常见的 Goessner 语法:$ 表示根,.key 和 ['key'],索引(包括负数索引),[*] 和用于递归查找的 ..,[0,2] 这样的并集,[1:3] 这样的切片,以及 [?(@.price < 10 && @.inStock)] 这样的过滤器。过滤器按 JavaScript 数字比较数值,因此超过 2^53 的整数只能近似比较。

最大能处理多大的文件?

最大 5 MB 的文件可以直接打开。在普通笔记本电脑上,约 4 MB 的文档校验和格式化只需零点几秒;超过约 200 KB 时,工具会等你停止输入后再重新检查。嵌套超过 2,000 层会报错。