← 全部文章

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

格式化 JSON 會改變鍵的順序嗎?

不會(除非你要求)。格式化會原樣保留鍵的順序,JavaScript 物件和 Python 字典(3.7+)都保持插入順序。把鍵按字母排序是另一個可選步驟(給 JSON.stringify 傳自訂 replacer,或 json.dumps(..., sort_keys=True))。

pretty print JSON 該用 2 個還是 4 個空格?

都可以 —— 這是風格偏好,不是對錯問題。2 個空格是最常見的預設值,4 個空格在 Python 和 Java 裡很常見。縮排是無意義的空白,所以不管選哪個,解析出來的資料都一樣。選一種,在整個專案裡保持一致即可。

相關工具與指南

來源

  • RFC 8259 §2 —— JSON 文法(無意義空白可以出現在任意兩個 token 之間這一規範性表述)
  • MDN —— JSON.stringify(控制 pretty-print 縮排的 space 參數)
  • Python —— json.dumps(標準函式庫中的對應物,indent 關鍵字)
  • jq 手冊(權威的命令列 JSON 處理器,預設就 pretty-print)

最後審閱:2026 年 6 月。