JSON 格式化完整指南:从入门到精通

本文面向所有需要处理 JSON 数据的开发者,从基础语法到高级格式化技巧,提供一套完整的实践指南。

一、为什么要格式化 JSON?

在实际开发中,你拿到的 JSON 数据往往是压缩成一行的——所有内容挤在一起,没有缩进,没有换行。比如 API 返回的响应、日志文件中的 JSON 记录、数据库导出的数据。这种「压缩态」虽然节省带宽,但对人眼极不友好。

格式化的核心价值有三点:

  1. 快速定位数据结构:通过缩进层级,一秒看出对象嵌套关系和数组边界。
  2. 发现语法错误:格式化过程本身就是一次语法校验。格式不正确的 JSON 无法被美化,错误信息会直接指出问题位置。
  3. 方便对比差异:两个 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 层时,手动折叠/展开每个节点效率极低。以下是应对策略:

  1. 使用「深度展开」功能:一键递归展开所有嵌套对象和数组。在 yyjson.top 中勾选「深度展开」复选框即可。
  2. 利用面包屑导航定位:点击面包屑路径中的任一层级,可快速跳转到父节点或根节点,无需逐层返回。
  3. 搜索关键字段:使用浏览器的 Ctrl+F 在格式化结果中搜索特定键名或值。
  4. 分段处理大文件:如果 JSON 文件超过 10MB,建议先用 jq 等命令行工具按路径提取子结构,再到工具中格式化。
  5. 关注数组边界:当数组包含数百个元素时,先看数组长度和第一个/最后一个元素的结构,不必展开全部。

五、JSON 压缩的使用场景

压缩与格式化互为逆操作。以下场景需要压缩:

  • 生产环境数据传输:压缩可减少 30%-50% 的空白字符,降低带宽成本。
  • localStorage 存储:浏览器本地存储有 5MB 限制,压缩后能存更多数据。
  • URL 参数传递:JSON 作为 URL 参数时,压缩态更短且避免空格被编码。
  • 日志文件瘦身:大量 JSON 日志压缩后能显著减小磁盘占用。

六、XML 格式化特别说明

yyjson.top 同时支持 JSON 和 XML 格式化。XML 格式化有几个额外要点:

  • 自动识别:工具会根据输入内容自动判断是 JSON 还是 XML,无需手动切换。
  • SOAP 支持:如果粘贴的是 SOAP 信封格式,工具会正确识别并美化 XML 部分。
  • 属性对齐:XML 元素的属性会在格式化后对齐,方便对比多个元素的结构差异。
  • 自闭合标签:工具不会修改原始 XML 的语义,自闭合标签保持原样。

七、不同编程语言的 JSON 处理对比

语言解析方法序列化方法注释
JavaScriptJSON.parse()JSON.stringify()内置,无需库
Pythonjson.loads()json.dumps()标准库 json
JavaJackson/GsonJackson/Gson第三方库为主
Gojson.Unmarshal()json.Marshal()encoding/json
PHPjson_decode()json_encode()内置

八、数据安全提示

格式化 JSON 数据时,请务必注意数据安全:

  • 不要在不可信的在线工具中粘贴敏感数据。yyjson.top 的格式化完全在浏览器本地执行,数据不会上传到任何服务器,可放心处理包含密钥、用户信息、业务数据的 JSON。
  • 处理前确认工具的数据流向。打开浏览器的开发者工具 Network 面板,格式化一条测试数据,观察是否有网络请求发出。yyjson.top 没有任何数据上传请求。
  • 离线模式验证。加载页面后断开网络,格式化功能仍然正常——这证明了纯前端架构的可靠性。
  • 避免在公共电脑上处理隐私数据后忘记清理。使用「清空全部」按钮清除输入和输出区域。

准备开始格式化你的 JSON 数据?

打开 JSON 格式化工具