JSON 工具箱

JSON 可以寫註解嗎

結論:RFC 8259 沒有註解語法,`//` 與 `/* */` 都會讓 JSON.parse 直接拋錯。要寫說明只有四條路:改用 JSON5/JSONC、把備註塞進資料欄位、寫進 Schema 的 description,或改用 YAML。

入門約 3 分鐘發佈於 2026-10-30更新於 2026-10-30
JSON 能否寫註解的結論與替代寫法

結論:標準 JSON 裡不要寫註解;只給人編輯的本機設定改用 JSONC 或 JSON5,要跨系統傳輸時把說明搬進 JSON Schema 的 description,註解量大就直接換 YAML 或 TOML。

不行。

在任何標準 JSON 解析器裡,下面這段都會拋錯:

{
  "port": 8080 // 本機開發用這個埠
}

瀏覽器主控台給的訊息是 SyntaxError: Unexpected token }——註解被當成非法字元,解析器讀到 / 就停下來了。

標準為什麼刻意不留註解

RFC 8259 的語法只有六種值:物件、陣列、數字、字串、true/false、null,沒有任何註解產生式。 早期確實有人提議要加,反對的理由很實際:註解一旦合法,就會有人拿它放解析指令,例如條件包含、範本變數,於是每個解析器都要實作自己的方言,跨語言互換立刻失效。JSON 的定位是「資料就是資料」,把可執行的語意擋在門外。

所以註解不是「沒人做」,而是「有意不做」。

想寫說明,四條路可選

第一條:改用 JSON5 或 JSONC。 這兩個都是超集,//、/* */ 都支援,VS Code 的 settings.json、tsconfig.json 走的就是 JSONC。 代價很清楚:JSON.parse 依然不認,介面、日誌、訊息佇列通常只吃標準 JSON,註解會在傳輸鏈路的某一環被吃掉或直接報錯。

第二條:把備註塞進資料。 常見寫法是加一個 _comment 或 _note 鍵:

{
  "_comment": "埠由維運統一分配,勿改",
  "port": 8080
}

代價是汙染資料模型,消費方必須知道要跳過哪些鍵,型別定義也要跟著多一個欄位。

第三條:寫進 JSON Schema。 description 本來就是給人和工具讀的,驗證器能輸出它,IDE 能顯示它,而它不進入資料本身。這是唯一既能長期維護、又不破壞相容性的做法。

第四條:換設定檔格式。 如果這份檔案天生就是給人改的,YAML 和 TOML 支援註解,比硬撐 JSON 更省事。

怎麼判斷該走哪條

情境 結論
要傳給外部系統、走介面、進訊息佇列 不能註解,說明寫進 Schema 或文件
只給人和編輯器看的設定 用 JSONC,別硬塞進 .json
需要工具鏈全相容,又要保留說明 標準 JSON + Schema description
設定檔很長、註解很多 直接換 YAML

常見問題

為什麼 _comment 欄位會汙染資料模型?

因為它進入了資料本身。消費方必須知道要跳過哪些鍵,型別定義也要多出一個並非真實業務的欄位。

是否能把說明寫進 JSON Schema?

可以,而且這是唯一既能長期維護、又不破壞相容性的做法。description 不進入資料,驗證器能輸出它,IDE 也能顯示它。

JSONC 和 JSON5 能否直接交給 JSON.parse?

不能。JSON.parse 依然不認註解,介面、日誌和訊息佇列通常只吃標準 JSON,註解會在鏈路的某一環被吃掉或直接報錯。

相關工具

  • JSON5 解析器:把帶註解的設定貼進去,看解析後到底是什麼結構
  • JSON 格式化與驗證:非法 JSON 會定位到具體行列,註解寫在哪一行一眼能看出來

延伸閱讀