← 全部文章

JSON Pretty Print vs JSON Format:有什么区别?

对 JSON 来说,pretty print、format 和 beautify 是同一回事。讲清楚为什么、真正的区别是什么(minify、validate、tree view),以及如何在线美化 JSON。

短答:对 JSON 而言,「pretty print」和「format」是同一件事 —— 「beautify」也一样。三个词都指:在不改变数据的前提下,加上一致的缩进和换行,让结构变得可读。混乱倒是真的存在,因为旁边还坐着几个确实不同的操作(压缩、校验、树视图)。本文把术语理清楚,并说明什么才是真正的差别。

Pretty Print、Format、Beautify —— 同一个操作

「Pretty print JSON」「format JSON」「beautify JSON」都在描述同一个操作:把一个 JSON 值(通常是紧凑的单行字符串)重新序列化,加上缩进和换行。输出在语义上完全等同于输入 —— 任何解析器从这两种形式都会产出同样的数据,因为 token 之间的空白在 JSON 里是无意义的。

// 紧凑形式(API 返回的样子)
{"user":{"name":"Ada","roles":["admin","editor"]}}

// pretty-printed / formatted / beautified —— 数据完全一样
{
  "user": {
    "name": "Ada",
    "roles": [
      "admin",
      "editor"
    ]
  }
}

所以如果一个工具把「Format」「Beautify」「Pretty Print」做成了不同的按钮,它们干的是同一份活。没什么有意义的技术区别要去学。

那真正不同的是什么?

有意义的区别不在 pretty-print 和 format 之间 —— 而在「格式化」和下面这些邻近操作之间:

操作做什么改变数据吗?
Pretty print / format / beautify加空白让结构更易读不改
Minify(压缩)去掉空白以缩小体积不改
Validate(校验)检查 JSON 语法是否正确不改
Tree view(树视图)渲染出可交互、可折叠的结构不改
Repair(修复)修复非法 JSON(引号、逗号)以便能解析改(修语法)

Minify 是 pretty print 的反操作 —— 见 如何压缩 JSON。校验是单独的检查(如何校验 JSON);把大 payload 以树状形式探查是自成一类的事(JSON 树视图)。如果你的输入根本解析不了,那要先 repair,不是 format。

怎么 pretty print JSON

不管工具用哪个词,机制都是一样的:

// JavaScript —— 第三个参数是缩进
JSON.stringify(value, null, 2);                 // 从一个值开始
JSON.stringify(JSON.parse(raw), null, 2);       // 从 JSON 字符串开始

# Python
import json
json.dumps(data, indent=2)

# 命令行
jq . data.json                                  # jq 默认就 pretty-print
python3 -m json.tool data.json

完整走一遍 —— 排序键、命令行选项、把别的格式转过来 —— 请看 如何格式化 JSON

在线 pretty print JSON

不想写代码直接 pretty-print,就把 JSON 贴到 JSON Fix:它会用一致的 2 格缩进格式化(顺手把常见错误也修了,所以即便 JSON 不完全合法也能用),全部在浏览器里,不上传任何东西。想要大文档的可交互视图?改用 JSON Viewer

常见问题

「pretty print JSON」和「format JSON」是一回事吗?

是的。对 JSON 而言,pretty print、format、beautify 意思都一样:在不改变数据的前提下,加上缩进和换行让它可读。

pretty print 会改我的 JSON 数据吗?

不会。token 之间的空白在 JSON 里无意义,pretty-printed 和紧凑两种形式解析后得到完全相同的数据结构。

在 JavaScript 里怎么 pretty print JSON?

JSON.stringify(value, null, 2) —— 第三个参数设缩进(2 个空格、4 个空格,或者用 '\t' 来 tab)。如果起点是字符串,先 parse。

pretty print JSON 的反操作是什么?

Minify(压缩)—— 去掉一切无意义的空白,生成紧凑的单行 JSON。见 如何压缩 JSON

相关工具和指南