格式化并验证 JSON
让 JSON 更易阅读、检查语法或生成紧凑版本。本指南介绍缩进、键排序和保存结果的方法。
试用提供的示例
下载 order-options.json,这是一个包含两件商品的虚构订单,字段名使用英语。customer 对象包含姓名和城市;items 数组依次包含 CARD-02 和 BOX-01。示例中有带引号的文本、数值形式的数量和价格、布尔值 true,以及表示空配送备注的 null。字段特意未排序,便于观察排序选项的效果。
操作步骤
- 打开JSON 格式化与验证器。使用文件打开提供的 order-options.json,或将文件内容粘贴到输入参数。
- 将缩进设为 2,表示每层缩进两个空格。首次运行时不要勾选排序对象键。
- 选择处理输入。工具会先检查 JSON 语法,再显示结果。如果报错,请根据行号和列号找到问题,修正输入后重试。
- 阅读结果。customer 对象和两件商品应更容易理解,每行显示一个字段或列表元素。未勾选排序时,字段保持示例中的顺序。
- 选择下载结果保存 formatted.json。也可以使用复制文字将结果放入其他编辑器。
- 在文本编辑器中打开下载的文件,按照下方检查项与示例比较。然后试用其他缩进和排序选项,每次更改后都重新选择处理输入。
前后对比示例
这些简短示例将 order-options.json 中的 customer 对象展示为一个小型 JSON 文档。比较每种设置前后相同的姓名和城市。末尾的可选参考部分展示完整订单。
让紧凑 JSON 更易阅读
将缩进设为 2,不勾选排序对象键,然后选择处理输入。结果会加入换行和每层两个空格,同时保留字段的原始顺序。
之前:紧凑输入
{"customer":{"name":"Zoë","city":"Bergen"}}之后:两个空格的缩进
{
"customer": {
"name": "Zoë",
"city": "Bergen"
}
}对对象内部的键排序
保持缩进为 2,勾选排序对象键,然后选择处理输入。在 customer 内,city 现在位于 name 之前。两个值都保持不变。
之前:原始键顺序
{
"customer": {
"name": "Zoë",
"city": "Bergen"
}
}之后:已排序的对象键
{
"customer": {
"city": "Bergen",
"name": "Zoë"
}
}让 JSON 更紧凑
在缩进中选择压缩,不勾选排序对象键,然后选择处理输入。格式化空格和换行会被移除;文本和字段顺序保持不变。
之前:两个空格的缩进
{
"customer": {
"name": "Zoë",
"city": "Bergen"
}
}之后:压缩
{"customer":{"name":"Zoë","city":"Bergen"}}选择缩进
| 选项 | 作用 |
|---|---|
| 2 | 每层嵌套使用两个空格。这是主要操作步骤使用的设置。 |
| 4 | 每层嵌套使用四个空格,让嵌套对象和数组更加突出。 |
| ↹ | 每层嵌套使用一个制表符。制表符的显示宽度取决于文本编辑器。 |
| 压缩 | 移除格式化空格和换行。带引号文本内部的空格仍属于该文本。需要紧凑输出时选择此项,然后选择处理输入。 |
更改输入或选项会清除上一次结果。重新选择处理输入,用新设置生成结果。工具每次都会读取输入区域,不会自动将上一次结果填回输入。
对对象键排序
不勾选排序对象键可保留各对象原始的字段顺序。勾选后,会在整个文档中按区分大小写的文本顺序排列键,包括数组内部的对象。数组元素本身保持原始顺序。
- 保持缩进为 2,勾选排序对象键,然后选择处理输入。
- 顶层键现在依次为 customer、deliveryNote、items、order 和 paid。customer 内的 city 位于 name 之前。每件商品内的 price 位于 quantity 和 sku 之前。
- items 数组仍然是 CARD-02 在前、BOX-01 在后。键排序不会按 sku 或价格重新排列商品。
复制、下载和重新开始
| 选项 | 作用 |
|---|---|
| 复制文字 | 将当前结果复制为文本。如果无法复制,工具会选中结果,方便手动复制。 |
| 下载结果 | 将当前结果保存为 formatted.json。格式化、紧凑和排序后的结果都使用此文件名;如需保留多个版本,请重命名文件。 |
| 打印结果 | 为结果文本打开浏览器的打印对话框。 |
| 载入示例 | 用工具内置示例替换输入,并按当前设置处理。该示例与本指南的 order-options.json 不同。 |
| 全部清除 | 清除输入、选中的文件和结果。缩进和排序设置保持不变。 |
检查下载的 JSON
- 在文本编辑器中打开 formatted.json。确认订单为 ORD-1042,客户是住在 Bergen 的 Zoë,并且有两件商品。
- 检查值及其类型:quantity 依次是数值 2 和 1,价格保留 19.50 和 5.00,paid 是不带引号的布尔值 true,deliveryNote 是不带引号的 null。带引号的姓名和商品代码仍是字符串。
- 试用排序对象键后,确认字段顺序符合上述说明,并确认 items 数组中的 CARD-02 仍在 BOX-01 之前。
- 试用压缩和处理输入。将结果粘贴回输入参数,将缩进设为 2,再次选择处理输入。与原始示例比较值和商品顺序;格式设置应保留这些内容。
常见问题与故障排查
为什么提示 JSON 无效?
检查报错的行、列以及该位置之前的字段。键和文本需要双引号;字段需要逗号和冒号;方括号和花括号必须闭合。修正输入后重新选择处理输入。验证只检查 JSON 语法,因此有效结果仍可能缺少应用所需的字段。
可以使用注释或尾随逗号吗?
删除注释,以及紧邻闭合方括号或花括号之前的逗号。它们不属于有效 JSON。格式化工具要求有效输入,不会自动修复。
重复键警告是什么意思?
“已保留重复对象键。部分读取程序会丢弃重复键。”表示同一对象中某个键出现了多次。格式化工具会保留这些条目并发出警告。检查源数据,选择需要的值并删除多余条目;其他应用可能只保留其中一个。
为什么文件无法打开或处理?
输入上限为 2 MiB,即 2,097,152 字节。本地文本文件必须使用 UTF-8。如果工具提示数据过于复杂,请减少嵌套层数或条目数量。将大型输入拆分为较小且完整的 JSON 文档,不要在对象或数组中间截断。
为什么长数字在其他应用中发生变化?
下方独立的精度示例包含 9007199254740993 和 0.10000000000000001。此格式化工具在所有缩进和排序设置下都完整保留这些数字的原始文本。格式化 exact-numbers.json,然后在文本编辑器中与 exact-numbers-formatted.json 比较。导入结果的应用仍可能对数字进行舍入,因此请确认它支持所需精度。00123 这类带前导零的代码,在 JSON 中必须是带引号的字符串。
格式化可以恢复已经舍入的数字吗?
格式化无法恢复文本进入工具之前已被舍入或删除的数字。请返回原始来源,重新导出完整值。如果该值是标识符而非数量,使用字符串可以帮助接收应用保留全部数字。
可选:比较示例和参考输出
这些代码示例和下载文件由工具页面使用的同一格式化工具从 order-options.json 生成。格式化和紧凑参考输出关闭键排序;排序参考输出使用两个空格缩进并开启排序。
原始示例
{"order":"ORD-1042", "customer": {"name":"Zoë","city":"Bergen"}, "items":[{"sku":"CARD-02", "quantity":2,"price":19.50},{"sku":"BOX-01","quantity":1, "price":5.00}], "paid":true, "deliveryNote":null}
两个空格;原始键顺序
{
"order": "ORD-1042",
"customer": {
"name": "Zoë",
"city": "Bergen"
},
"items": [
{
"sku": "CARD-02",
"quantity": 2,
"price": 19.50
},
{
"sku": "BOX-01",
"quantity": 1,
"price": 5.00
}
],
"paid": true,
"deliveryNote": null
}压缩;原始键顺序
{"order":"ORD-1042","customer":{"name":"Zoë","city":"Bergen"},"items":[{"sku":"CARD-02","quantity":2,"price":19.50},{"sku":"BOX-01","quantity":1,"price":5.00}],"paid":true,"deliveryNote":null}两个空格;已排序的对象键
{
"customer": {
"city": "Bergen",
"name": "Zoë"
},
"deliveryNote": null,
"items": [
{
"price": 19.50,
"quantity": 2,
"sku": "CARD-02"
},
{
"price": 5.00,
"quantity": 1,
"sku": "BOX-01"
}
],
"order": "ORD-1042",
"paid": true
}| 参考文件 | 设置 | 字节 |
|---|---|---|
| order-formatted.json | 两个空格;原始键顺序 | 300 |
| order-minified.json | 压缩;原始键顺序 | 193 |
| order-sorted.json | 两个空格;已排序的对象键 | 300 |
这些是实际的文本输出,并非界面截图。代码可能会根据屏幕宽度自动折行。参考文件名用于区分示例;工具本身下载的每个版本都命名为 formatted.json。