JSON 格式化完整指南:从入门到精通
本文面向所有需要处理 JSON 数据的开发者,从基础语法到高级格式化技巧,提供一套完整的实践指南。
一、为什么要格式化 JSON?
在实际开发中,你拿到的 JSON 数据往往是压缩成一行的——所有内容挤在一起,没有缩进,没有换行。比如 API 返回的响应、日志文件中的 JSON 记录、数据库导出的数据。这种「压缩态」虽然节省带宽,但对人眼极不友好。
格式化的核心价值有三点:
- 快速定位数据结构:通过缩进层级,一秒看出对象嵌套关系和数组边界。
- 发现语法错误:格式化过程本身就是一次语法校验。格式不正确的 JSON 无法被美化,错误信息会直接指出问题位置。
- 方便对比差异:两个 JSON 对象是否一致?格式化后逐行比较即可,无需编写脚本。
以下是一段典型的「压缩态」JSON:
{"code":200,"data":{"users":[{"id":1,"name":"张三","email":"zhang@example.com","roles":["admin","editor"],"metadata":{"lastLogin":"2024-01-15T08:30:00Z","loginCount":142}},{"id":2,"name":"李四","email":"li@example.com","roles":["viewer"],"metadata":{"lastLogin":"2024-01-14T12:00:00Z","loginCount":37}}],"pagination":{"page":1,"size":20,"total":256}},"message":"success"}格式化后,结构一目了然:
{
"code": 200,
"data": {
"users": [
{
"id": 1,
"name": "张三",
"email": "zhang@example.com",
"roles": ["admin", "editor"],
"metadata": {
"lastLogin": "2024-01-15T08:30:00Z",
"loginCount": 142
}
},
{
"id": 2,
"name": "李四",
"email": "li@example.com",
"roles": ["viewer"],
"metadata": {
"lastLogin": "2024-01-14T12:00:00Z",
"loginCount": 37
}
}
],
"pagination": {
"page": 1,
"size": 20,
"total": 256
}
},
"message": "success"
}二、JSON 语法速查表
JSON 只有六种数据类型和三条语法规则。掌握这些,你就能写出合法的 JSON。
| 数据类型 | 写法 | 示例 |
|---|---|---|
| 字符串 | 双引号包围 | "hello" |
| 数字 | 整数或小数,无引号 | 42, 3.14, -7 |
| 布尔值 | true/false,全小写 | true |
| null | 全小写 | null |
| 对象 | 花括号 {} | {"key":"value"} |
| 数组 | 方括号 [] | [1, 2, 3] |
三条铁律:键名必须用双引号(单引号不行);字符串值必须用双引号;最后一项后面不能有逗号。
三、常见 JSON 格式化错误及解决方案
错误 1:尾部逗号
最常见的 JSON 错误。在对象或数组的最后一个元素后多写了一个逗号:
{"name": "张三", "age": 30, } ← 多余逗号导致解析失败解决:删除最后一项后面的逗号。在 yyjson.top 工具中,格式化时会自动提示错误位置。
错误 2:单引号代替双引号
从 JavaScript 代码中复制来的对象常犯这个错误:
{'name': '张三'} ← 单引号不是合法 JSON解决:将所有单引号替换为双引号。JSON 严格要求双引号。
错误 3:注释残留
JSON 标准不支持注释。从配置文件(如带注释的 JSON5)中复制内容时注意清理:
{
// 用户信息
"name": "张三" ← 注释导致 JSON 非法
}解决:删除所有注释行后再格式化。
错误 4:未转义的特殊字符
字符串中包含双引号、反斜杠、换行符等需要转义:
{"message": "他说:"你好""} ← 内部双引号需要转义为 \"解决:使用 \" 转义双引号,\\ 转义反斜杠,\n 表示换行。
四、处理深层嵌套数据的技巧
当 JSON 嵌套层级超过 5 层时,手动折叠/展开每个节点效率极低。以下是应对策略:
- 使用「深度展开」功能:一键递归展开所有嵌套对象和数组。在 yyjson.top 中勾选「深度展开」复选框即可。
- 利用面包屑导航定位:点击面包屑路径中的任一层级,可快速跳转到父节点或根节点,无需逐层返回。
- 搜索关键字段:使用浏览器的 Ctrl+F 在格式化结果中搜索特定键名或值。
- 分段处理大文件:如果 JSON 文件超过 10MB,建议先用 jq 等命令行工具按路径提取子结构,再到工具中格式化。
- 关注数组边界:当数组包含数百个元素时,先看数组长度和第一个/最后一个元素的结构,不必展开全部。
五、JSON 压缩的使用场景
压缩与格式化互为逆操作。以下场景需要压缩:
- 生产环境数据传输:压缩可减少 30%-50% 的空白字符,降低带宽成本。
- localStorage 存储:浏览器本地存储有 5MB 限制,压缩后能存更多数据。
- URL 参数传递:JSON 作为 URL 参数时,压缩态更短且避免空格被编码。
- 日志文件瘦身:大量 JSON 日志压缩后能显著减小磁盘占用。
六、XML 格式化特别说明
yyjson.top 同时支持 JSON 和 XML 格式化。XML 格式化有几个额外要点:
- 自动识别:工具会根据输入内容自动判断是 JSON 还是 XML,无需手动切换。
- SOAP 支持:如果粘贴的是 SOAP 信封格式,工具会正确识别并美化 XML 部分。
- 属性对齐:XML 元素的属性会在格式化后对齐,方便对比多个元素的结构差异。
- 自闭合标签:工具不会修改原始 XML 的语义,自闭合标签保持原样。
七、不同编程语言的 JSON 处理对比
| 语言 | 解析方法 | 序列化方法 | 注释 |
|---|---|---|---|
| JavaScript | JSON.parse() | JSON.stringify() | 内置,无需库 |
| Python | json.loads() | json.dumps() | 标准库 json |
| Java | Jackson/Gson | Jackson/Gson | 第三方库为主 |
| Go | json.Unmarshal() | json.Marshal() | encoding/json |
| PHP | json_decode() | json_encode() | 内置 |
八、数据安全提示
格式化 JSON 数据时,请务必注意数据安全:
- 不要在不可信的在线工具中粘贴敏感数据。yyjson.top 的格式化完全在浏览器本地执行,数据不会上传到任何服务器,可放心处理包含密钥、用户信息、业务数据的 JSON。
- 处理前确认工具的数据流向。打开浏览器的开发者工具 Network 面板,格式化一条测试数据,观察是否有网络请求发出。yyjson.top 没有任何数据上传请求。
- 离线模式验证。加载页面后断开网络,格式化功能仍然正常——这证明了纯前端架构的可靠性。
- 避免在公共电脑上处理隐私数据后忘记清理。使用「清空全部」按钮清除输入和输出区域。
准备开始格式化你的 JSON 数据?
打开 JSON 格式化工具