← 全部文章

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

相關工具與指南