JSON 格式化工具

格式化、验证和压缩 JSON,支持语法高亮显示。

AI
批量模式 Pro

什么是 JSON 格式化工具?

JSON(JavaScript 对象表示法)是用于 API、配置文件和 Web 应用的通用数据交换格式。JSON 格式化工具将未格式化、已压缩或格式错误的 JSON 转换为可读、缩进规范的输出。它还会根据规范验证你的 JSON,并高亮显示语法错误的确切位置,是任何使用 API 或配置文件的开发者必备的日常工具。

原始 API 响应、数据库导出和程序生成的 JSON 通常是压缩过的——去除了所有空白以减小文件体积。这对机器高效,但压缩后的 JSON 几乎无法供人阅读和调试。我们的格式化工具会添加一致的缩进和换行,使嵌套结构清晰可见,帮助你快速理解复杂的 JSON 并定位特定字段。

除了格式化,我们的工具还会按照 RFC 8259 验证 JSON。常见错误——末尾逗号、单引号、未加引号的键、JavaScript 风格的注释——都是无效的 JSON,会导致解析失败。验证器会准确指出这些错误发生的位置,把晦涩的解析失败转化为可操作的错误信息。

使用场景

以下是人们每天使用 JSON 格式化工具 的最常见场景。

API 响应调试

当 API 返回意外数据时,粘贴原始响应正文使其结构可读。又长又嵌套的 JSON 在正确缩进后变得易于浏览。快速定位特定字段、检查数据类型、核对数组长度,并识别缺失或意外的键。格式化工具把一堵字符墙变成结构化、可快速扫读的文档。

编辑配置文件

package.json、tsconfig.json、.eslintrc、vercel.json 以及无数其他配置文件都使用 JSON。验证器会在你运行工具并遇到晦涩的解析失败之前就发现语法错误。一致的格式确保版本控制中的 diff 干净整洁。

为生产环境压缩

在发布 JSON 文件之前,将其压缩以去除空白并减小体积。一个 50KB 的格式化配置文件压缩后约为 35KB。对通过 HTTP 提供的 API 响应和配置文件使用压缩功能,在不改变数据的情况下减小负载大小。

API 文档示例

API 文档需要格式良好的 JSON 请求和响应示例。格式化你的示例负载,使文档一致、易读,从而缩短集成时间,因为开发者可以立即理解预期的结构和数据类型。

数据比较与审查

在比较两个 JSON 响应时——更改前后、来自两个不同环境——缩进一致的格式化 JSON 让差异一目了然。格式化后的输出可粘贴到 diff 工具中进行逐行比较。来自不同来源的压缩 JSON 可能键序不同,不先格式化就无法直接比较。

验证 Webhook 和事件负载

Stripe、GitHub、Twilio 等平台的 Webhook 会向你的端点投递 JSON 负载。在调试 Webhook 处理或编写集成测试时,将原始负载粘贴到格式化工具中,以理解完整结构,包括嵌套对象、数组长度和数据类型。验证器会立即捕获会让 JSON.parse() 抛错的格式错误负载,省去在处理程序中追查意外解析失败来源的时间。

示例

示例 1

格式化压缩后的响应

让压缩后的 API 响应变得可读。

输入 {"user":{"id":42,"name":"John","active":true}}
输出 { "user": { "id": 42, "name": "John", "active": true } }
示例 2

发现末尾逗号错误

在最常见的 JSON 语法错误导致运行时失败之前识别并修复它。

输入 { "name": "app", "version": "1.0.0", }
输出 错误:第 3 行有末尾逗号——删除 "1.0.0" 后面的逗号
示例 3

格式化深度嵌套的响应

让含有嵌套数组和对象的复杂 API 响应变得易于浏览。

输入 {"data":{"users":[{"id":1,"profile":{"name":"Alice","roles":["admin","editor"]}},{"id":2,"profile":{"name":"Bob","roles":["viewer"]}}],"total":2}}
输出 以一致的 2 空格缩进格式化的 6 层深结构

JSON 格式化工具 对比 Browser DevTools / VS Code

我们的独立格式化工具与内置开发者工具在 JSON 工作上的对比。

功能 Toolorah Browser DevTools / VS Code
无需打开项目即可使用 是——浏览器标签页 需要打开 DevTools 或编辑器
粘贴时验证 JSON 是——立即 VS Code:需扩展;DevTools:否
显示错误位置 是——行和字符 VS Code:是;DevTools:有限
压缩输出 DevTools:通过控制台可以;VS Code:需扩展
处理任意大小的输入 客户端——1MB 以下最佳 VS Code 对大文件处理更好
无需安装 VS Code 需要安装
与同事共享 粘贴结果 共享文件

JSON 格式化工具 使用技巧

  • JSON 要求所有键和字符串值都使用双引号——单引号会导致解析错误。
  • 对象或数组中最后一个元素之后的末尾逗号不是有效的 JSON。
  • JSON 不支持注释——如果你需要在配置文件中加入可读的注释,请使用 JSONC 或 YAML。
  • 对于非常大的 JSON 文件(数兆字节),请使用 jq 等本地工具或你的代码编辑器以获得更好的性能。
  • 2 空格缩进是最常见的标准——被 npm、大多数 JSON 格式化工具和主要风格指南采用。

常见问题解答

我的 JSON 为什么无效?

最常见的 JSON 验证错误:末尾逗号(对象或数组的最后一项后面不能有逗号)、用单引号代替双引号(JSON 要求所有字符串和键使用双引号)、未加引号的键({"key": "value"} 有效,{key: "value"} 无效)、JavaScript 风格的注释(// 和 /* */ 在 JSON 中无效)、undefined 和 NaN 值(请改用 null),以及带前导零的数字(0123 无效,123 有效)。验证器会高亮它遇到的第一个错误的行号和字符位置。

JSON 和 JavaScript 对象有什么区别?

JSON 是从 JavaScript 对象语法派生出的严格数据格式,但有以下限制:所有键必须使用双引号,字符串值需要双引号,不允许函数和 undefined,不允许注释,Infinity 和 NaN 等特殊浮点值无效。有效的 JSON 是有效的 JavaScript(作为字面量),但有效的 JavaScript 对象往往不是有效的 JSON。最常见的违规是带有未加引号键的 JavaScript 对象——这是完全有效的 JS 语法,却是无效的 JSON。

我应该使用多大的缩进?

两个空格是最常见的标准,被 npm 的 package.json 输出、大多数 JSON 工具以及 Google 和 Airbnb 等风格指南采用。一些团队使用四个空格,这在基于 Python 的工具中也很常见。Tab 缩进生成的文件最小(每级一个字节),并允许编辑器按用户偏好显示宽度。项目内部的一致性比选择哪种更重要——使用你项目现有文件已采用的方式。

如何以编程方式验证 JSON?

在 JavaScript 中,用 try-catch 包裹 JSON.parse():try { const obj = JSON.parse(jsonString); } catch (e) { console.log("无效的 JSON:", e.message); }。在 Python 中,在 try-except 块里使用 json.loads()。两种方法都会暴露解析错误信息,通常包含无效字符的行号和位置。要在 CI/CD 流水线中验证,jsonlint(Node.js CLI)和 jq(通用 JSON 处理器)等工具可作为自动检查的一部分验证文件。

JSON5 是什么,它与 JSON 有何不同?

JSON5 是 JSON 的超集,增加了类似 JavaScript 的特性:未加引号的键、单引号字符串、末尾逗号、多行字符串和 JavaScript 注释。它是为人工编写、希望获得这些便利的配置文件而创建的。JSON5 不是标准 JSON,无法用 JSON.parse() 解析——它需要单独的 JSON5 库。JSONC(带注释的 JSON)是另一种常见的配置格式,只增加了注释支持。我们的格式化工具处理标准 JSON;对于 JSON5 或 JSONC,使用你编辑器的格式化命令更合适。

JSON 能表示所有 JavaScript 数据类型吗?

JSON 支持有限的一组类型:对象(键值映射)、数组、字符串、数字、布尔值(true/false)和 null。JSON 不支持的 JavaScript 类型:undefined(用 null)、函数(无法序列化)、Symbol、BigInt、Date 对象(转换为 ISO 字符串:date.toISOString())、Map 和 Set(转换为数组或对象),以及循环引用(会让 JSON.stringify 抛错)。将 JavaScript 序列化为 JSON 时,必须在调用 JSON.stringify() 之前手动转换这些类型。

NDJSON 是什么,它与普通 JSON 有何不同?

NDJSON(换行分隔的 JSON,也称 JSON Lines 或 JSONL)每行存储一个完整的 JSON 对象,而不是把所有记录包裹在单个数组中。普通 JSON:[{"id":1},{"id":2}]。NDJSON:{"id":1}\n{"id":2}。NDJSON 更适合流式数据、日志文件和大型数据集,因为你可以一次读取和处理一条记录,而无需将整个文件载入内存。标准 JSON 解析器无法直接解析 NDJSON——每行必须用 JSON.parse() 单独解析。