什么是 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() 抛错的格式错误负载,省去在处理程序中追查意外解析失败来源的时间。
示例
格式化压缩后的响应
让压缩后的 API 响应变得可读。
{"user":{"id":42,"name":"John","active":true}} {
"user": {
"id": 42,
"name": "John",
"active": true
}
} 发现末尾逗号错误
在最常见的 JSON 语法错误导致运行时失败之前识别并修复它。
{
"name": "app",
"version": "1.0.0",
} 错误:第 3 行有末尾逗号——删除 "1.0.0" 后面的逗号 格式化深度嵌套的响应
让含有嵌套数组和对象的复杂 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() 单独解析。