
如何在线格式化JSON — 完整指南
📷 Lukas / Pexels如何在线格式化JSON — 完整指南
学习如何使用免费的在线JSON格式化器格式化、验证和清理JSON数据。适合开发者和API调试使用。
什么是JSON?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,人类易于读写,机器也易于解析和生成。它是现代Web开发中API响应、配置文件和数据存储的主流格式。
如果你处理API,你会不断遇到JSON。几乎每个REST API响应、每个Webhook载荷以及Node.js项目中的每个配置文件都是JSON格式。了解如何读取、格式化和调试JSON是开发者的核心技能。
为什么要格式化JSON?
压缩的JSON很难阅读。API响应通常以没有空格的单行形式到达 — 调试起来就是噩梦。格式化(或"美化打印")JSON会添加适当的缩进和换行,让你能够立即理解其结构。
格式化前:
{"name":"John Doe","age":30,"city":"New York","hobbies":["reading","coding"],"address":{"street":"123 Main St","zip":"10001"}}
格式化后:
{
"name": "John Doe",
"age": 30,
"city": "New York",
"hobbies": [
"reading",
"coding"
],
"address": {
"street": "123 Main St",
"zip": "10001"
}
}
差别是显著的。在格式化版本中,你一眼就能看出有五个顶级键,hobbies是一个有两个元素的数组,address是一个嵌套对象。在压缩版本中,你必须靠视觉解析匹配的大括号和方括号。
如何使用JSON格式化器
- 粘贴你的JSON — 将JSON数据放入输入框
- 点击"格式化" — 使用2或4空格缩进进行清理
- 点击"压缩" — 将JSON压缩回单行
- 复制结果 — 一键复制到剪贴板
格式化器在你粘贴时验证你的JSON,如果有任何问题,你会立即得到反馈。
常见的JSON错误(以及如何修复)
JSON有严格的语法规则,违反其中任何一条都会导致解析错误。以下是按实际出现频率排序的最常见错误:
1. 尾随逗号
最常见的JSON错误。JavaScript允许数组和对象中有尾随逗号,所以开发者经常忘记JSON不允许这样做。
// 错误 — "coding"后有尾随逗号
{
"hobbies": ["reading", "coding",]
}
// 正确
{
"hobbies": ["reading", "coding"]
}
2. 单引号代替双引号
JSON要求所有字符串使用双引号。单引号在JavaScript和Python中有效,但会破坏JSON解析。
// 错误
{'name': 'John Doe'}
// 正确
{"name": "John Doe"}
3. 未加引号的键
JavaScript对象不需要引号括起来的键(对于简单标识符),但在JSON中每个键必须是双引号括起来的字符串。
// 错误
{name: "John Doe", age: 30}
// 正确
{"name": "John Doe", "age": 30}
4. JSON中的注释
JSON不支持注释。这让人惊讶,因为JSON看起来像JavaScript,而JavaScript支持注释。如果你需要在配置文件中添加注释,请使用JSONC(VS Code支持的JSON with Comments)或YAML。
// 错误
{
"port": 3000, // 服务器端口
"host": "localhost"
}
// 正确
{
"port": 3000,
"host": "localhost"
}
5. 未转义的特殊字符
包含反斜杠、双引号或控制字符的字符串必须正确转义:
// 错误 — 未转义的反斜杠和引号
{"path": "C:\Users\john", "note": "He said "hello""}
// 正确
{"path": "C:\\Users\\john", "note": "He said \"hello\""}
6. 无效的值类型
JSON支持的值类型只有:字符串、数字、布尔值(true/false)、null、对象和数组。其他任何内容都无效:
// 错误
{"value": undefined}
{"count": NaN}
{"total": Infinity}
{"date": new Date()}
// 正确的替代
{"value": null}
{"count": 0}
{"total": 9999999}
{"date": "2026-03-15T10:30:00Z"}
从命令行格式化JSON
当你无法访问基于Web的工具,或需要在脚本中格式化JSON时,以下命令行方法很有用:
使用Python(大多数系统上可用)
# 格式化JSON文件
python3 -m json.tool input.json
# 格式化管道传输的JSON
curl -s https://api.example.com/data | python3 -m json.tool
# 使用自定义缩进格式化
python3 -c "import json,sys; print(json.dumps(json.load(sys.stdin), indent=4))" < input.json
使用jq(JSON的瑞士军刀)
jq是一个专用的JSON处理器,也是在命令行处理JSON最强大的工具:
# 美化打印
cat data.json | jq '.'
# 格式化并提取特定字段
cat data.json | jq '.users[0].name'
# 格式化API响应
curl -s https://api.example.com/users | jq '.'
如果你经常处理JSON但还没有安装jq,现在就安装它。它会为你节省无数小时。
使用Node.js
# 快速格式化
node -e "console.log(JSON.stringify(JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')),null,2))" < input.json
处理JSON的技巧
明智地选择缩进
- 2空格缩进:更紧凑,屏幕上显示更多内容。在JavaScript/TypeScript项目和大多数Web框架中流行。大多数API文档中使用。
- 4空格缩进:深层嵌套结构更易阅读。在Python项目和企业级Java环境中常见。
- 制表符缩进:技术上有效但在JSON中罕见。坚持使用空格。
对于大多数Web开发,2空格是实用的选择。它在不浪费水平空间的情况下提供足够的视觉层次。
部署前始终验证
在生产环境中使用之前,特别是当你手动编写或修改JSON时,始终进行验证。一个缺失的逗号或不匹配的括号可能导致整个应用程序崩溃。我们的格式化器在你粘贴时就立即捕获语法错误,让你快速发现问题。
使用JSON Schema进行结构验证
如果你正在构建接受JSON输入的API,简单的解析是不够的。JSON Schema让你定义预期的结构、类型和约束:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": { "type": "string", "minLength": 1 },
"age": { "type": "integer", "minimum": 0 },
"email": { "type": "string", "format": "email" }
},
"required": ["name", "email"]
}
这会捕获缺失的必需字段、错误的类型和超出范围的值 — 这些是基本JSON解析永远无法捕获的。
排序键以保持一致的差异
比较两个JSON对象时(在代码审查或配置差异中),未排序的键会创建嘈杂的差异。许多格式化器,包括我们的,提供按字母顺序递归排序对象键的选项。这对以下情况特别有用:
- 版本控制中的配置文件(减少无意义的差异)
- 调试期间比较API响应
- 需要确定性的测试快照
真实的JSON调试场景
调试API响应
你发送了一个curl请求,收到了一行压缩的JSON。要理解哪里出了问题,首先需要看到结构:
curl -s https://api.example.com/users/123 | jq '.'
或者将响应粘贴到JSON格式化器中。然后你可以看到响应结构是否错误、字段是否缺失,或值是否意外。
比较两个JSON对象
你有两个应该相同但有些不同的API响应。用排序的键格式化两者,然后运行差异比较:
jq -S '.' response1.json > sorted1.json
jq -S '.' response2.json > sorted2.json
diff sorted1.json sorted2.json
-S标志按字母顺序排序键,这样结构差异不会在差异输出中产生干扰。
修复复制粘贴错误
同事将JSON粘贴到Slack,智能引号破坏了内容。将其粘贴到格式化器中,它会突出显示错误(弯引号代替直引号),这样你就知道需要修复什么。
这比你想象的更常见。聊天应用、文字处理器和一些文本编辑器会自动将"转换为弯引号,而弯引号在JSON中无效。
从大型JSON文件中提取数据
你收到了一个多兆字节的JSON文件,但只需要其中的一小部分。与其滚动数千行,不如使用jq提取你需要的内容:
# 获取第一个用户的电子邮件
cat users.json | jq '.data.users[0].email'
# 以平面列表形式获取所有用户名
cat users.json | jq '[.data.users[].name]'
# 按状态过滤用户
cat users.json | jq '[.data.users[] | select(.status == "active")]'
JSON与其他数据格式
| 属性 | JSON | YAML | XML | TOML |
|---|---|---|---|---|
| 可读性 | 良好 | 优秀 | 一般 | 良好 |
| 注释 | 不支持 | 支持 | 支持 | 支持 |
| 数据类型 | 基础 | 丰富 | 基于字符串 | 丰富 |
| 文件大小 | 小 | 小 | 大 | 小 |
| 解析速度 | 快 | 中等 | 慢 | 快 |
| 生态系统 | 庞大 | 大 | 大 | 增长中 |
JSON凭借其简洁性和通用的解析器支持赢得了API通信和数据交换的领域。YAML更适合注释和可读性重要的配置文件。XML在企业系统和文档格式中仍然保持其地位。TOML在配置方面(Rust的Cargo、Python的pyproject.toml)正在获得更多支持。
安全考虑
不要将敏感数据粘贴到服务器端格式化器
一些在线JSON格式化器会将你的数据发送到服务器进行处理。如果你处理API密钥、令牌、密码或个人数据,请只使用在浏览器中处理所有内容的客户端格式化器。我们的工具在本地完成所有格式化 — 数据永远不会被传输。
注意JSON注入
在构建接受JSON输入的应用程序时,始终验证和清理数据。永远不要通过连接字符串来构造JSON:
// 危险 — JSON注入风险
const json = '{"name": "' + userInput + '"}';
// 安全
const json = JSON.stringify({ name: userInput });
对不受信任的数据使用JSON.parse时要小心
JSON.parse()通常是安全的(不像eval()),但解析的数据可能有意外的类型或结构。在应用程序中使用之前,始终验证解析后JSON的形状。
立即使用免费的JSON格式化器格式化你的JSON数据。它完全在浏览器中运行,支持语法高亮,并在你粘贴时立即捕获错误。