JSON 工具箱

JSON、JSON5、JSONC 有什麼差別

結論:三者是嚴格包含關係:JSON 是標準,JSONC 只多註解,JSON5 還多單引號、無引號鍵、尾逗號、十六進位與多行字串。選錯格式的代價通常在「介面不認」而不是「讀不出來」。

入門約 4 分鐘發佈於 2026-10-30更新於 2026-10-30
JSON、JSON5、JSONC 能力對照表

結論:資料要跨系統傳輸就用標準 JSON,只在本機給人改的設定才用 JSONC 加註解;需要單引號、尾逗號或無引號鍵名時選 JSON5,並先確認載入它的工具支援。

一句話:JSONC 是 JSON 加註解,JSON5 是 JSON 加一大堆 JavaScript 習慣。

能力對照

特性 JSON JSONC JSON5
雙引號字串 ✅ ✅ ✅
單引號字串 ❌ ❌ ✅
鍵名可不加引號 ❌ ❌ ✅
// 行註解 ❌ ✅ ✅
/* */ 區塊註解 ❌ ✅ ✅
尾逗號 ❌ ❌ ✅
十六進位數 0xFF ❌ ❌ ✅
Infinity / NaN ❌ ❌ ✅
多行字串 \ 續行 ❌ ❌ ✅
標準解析器能讀 ✅ ❌ ❌

注意 JSONC 只解決註解。很多人以為「能寫註解的 JSON」都支援尾逗號,實際上 tsconfig.json 裡多一個尾逗號照樣報錯。

三者各自的定位

JSON:交換格式。介面、訊息佇列、資料庫欄位、日誌,只要是機器之間傳,就必須是它。

JSONC:編輯器設定格式。VS Code 的 settings.json、launch.json、tsconfig.json 都能寫註解,因為由編輯器自己解析,不經過 JSON.parse。它沒有獨立 RFC,是微軟主導的事實約定。

JSON5:給人寫的寬鬆超集。設計目標是「讓設定檔寫起來像 JavaScript 物件字面量」。適合 .json5 後綴的建置設定,語法糖最多,但工具鏈支援面最窄。

怎麼選

你的情境 選擇
介面請求/回應體 JSON,唯一選項
資料庫裡的 JSON 欄位 JSON,MySQL、PostgreSQL 的 JSON 函式只認標準
專案設定、要寫註解 JSONC(若工具支援)或 YAML
想要 JS 風格的寬鬆語法 JSON5,但要確認載入它的工具支援
需要給非技術人員改 YAML,縮排比括號友善

一個常被忽略的坑

把 JSONC 檔案當標準 JSON 讀,錯誤訊息往往指向註解,而不是檔案本身有問題:

SyntaxError: Unexpected token / in JSON at position 42

看到 / 報錯,先確認檔案是不是 .jsonc、tsconfig.json 這類允許註解的檔案,別急著刪註解——刪了可能還有尾逗號,一樣報錯。

常見問題

JSONC 和 JSON5 該怎麼選?

只需要註解就用 JSONC,它比 JSON 只多 // 與 /* */,VS Code 的 settings.json、tsconfig.json 都是這種格式。還需要單引號、無引號鍵名、尾逗號、十六進位數或多行字串時才用 JSON5。兩者都依賴工具支援,選之前先確認載入這些檔案的程式能解析。

為什麼 JSONC 不能當成標準 JSON 使用?

JSONC 是事實約定而非獨立 RFC,標準解析器不認註解。用 JSON.parse 讀帶註解的檔案會拋 Unexpected token /,錯誤指向註解而不是資料結構本身。只有由編輯器或專用解析器讀取的設定檔才適合寫成 JSONC。

是否可以直接把 JSON5 檔案發給介面?

不可以。介面、資料庫欄位與訊息佇列都按標準 JSON 解析,JSON5 的單引號、無引號鍵名與尾逗號會被拒絕。JSON5 的定位是本機給人寫的設定,跨系統傳輸前必須轉成標準 JSON。

延伸閱讀