JSON 无处不在——API、配置文件、数据库。但未格式化的 JSON 几乎无法阅读。本文介绍 JSON 格式化的含义、重要性以及高效处理方法。
什么是 JSON 格式化?
格式化(或”美化输出”)JSON 是指添加一致的缩进和换行,使结构易于阅读。对比一下:
原始:
{"name":"Alice","age":30,"skills":["js","python"]}
格式化后:
{
"name": "Alice",
"age": 30,
"skills": [
"js",
"python"
]
}
数据相同,可读性天壤之别。
JSON 语法规则
格式化之前,JSON 必须是合法的。关键规则:
- 字符串必须使用双引号——
"key",不能用'key' - 键必须是字符串(带引号)
- 不允许尾部逗号:
[1, 2, 3,]是无效的 - 不允许注释(标准 JSON 不支持)
- 值可以是:字符串、数字、对象、数组、
true、false、null
常见 JSON 错误
| 错误类型 | 示例 | 修复方法 |
|---|---|---|
| 尾部逗号 | {"a":1,} | 删除逗号 |
| 单引号 | {'a':'b'} | 改用双引号 |
| 未加引号的键 | {a: 1} | 给键加引号 |
| undefined 值 | {"x": undefined} | 改用 null |
| 注释 | // comment | 删除——JSON 不支持注释 |
如何在线格式化 JSON
最快的方式是使用纯浏览器工具——无需安装,无需粘贴到 IDE。
边输入边实时格式化,内联高亮语法错误,一键复制结果。
选择 JSON 格式化工具的标准
- 实时验证 — 边输边发现错误
- 语法高亮 — 嵌套结构一目了然
- 错误提示 — 精确告知解析失败位置
- 复制按钮 — 一键复制到剪贴板
在代码中格式化 JSON
JavaScript / Node.js
const ugly = '{"name":"Alice","age":30}';
const pretty = JSON.stringify(JSON.parse(ugly), null, 2);
console.log(pretty);
JSON.stringify(value, replacer, space) — 第三个参数设置缩进宽度。
Python
import json
ugly = '{"name": "Alice", "age": 30}'
pretty = json.dumps(json.loads(ugly), indent=2)
print(pretty)
命令行(jq)
echo '{"name":"Alice"}' | jq .
# 或格式化文件:
cat data.json | jq .
jq 是处理 JSON 的标准 Unix 工具。用 brew install jq 或 apt install jq 安装。
压缩 JSON
格式化的反操作:删除所有空白以减小文件体积。在通过网络传输数据前很有用。
// JavaScript
const minified = JSON.stringify(JSON.parse(pretty));
ZeroTool JSON 格式化工具 同样支持压缩——粘贴已格式化的 JSON 后点击压缩即可。
处理大型 JSON 的技巧
- 折叠节点 — 好的格式化工具支持折叠对象/数组
- 按键搜索 — 比滚动查找更快
- 分页数组 — 如果数组有数千项,只渲染可见行
- 使用流式解析器 — 文件超过 50 MB 时,用
oboe.js(Node.js)或ijson(Python)避免一次性加载
总结
| 任务 | 工具 |
|---|---|
| 快速格式化 / 验证 | ZeroTool JSON 格式化工具 |
| 命令行格式化 | jq . |
| JavaScript | JSON.stringify(obj, null, 2) |
| Python | json.dumps(obj, indent=2) |
整洁的 JSON 调试更快、diff 更清晰、也更不容易隐藏错误。养成每次都使用格式化工具的习惯。