單元 6 · 延伸格式

JSONC、JSON5、JSON Lines — Extended Formats

本課重點:JSON 不能加註解、不能有尾逗號,對「人寫的設定檔」很不友善。 於是誕生了各種延伸格式——它們大多能被解析器「寬鬆處理」後轉成標準 JSON。 這頁講最重要的三個:JSONCJSON5JSON Lines

為什麼需要延伸格式

純 JSON 設定檔的痛苦:

延伸格式就是在「嚴格」與「人味」之間取平衡。

JSONC · JSON with Comments

JSONC(JSON with Comments)= 標準 JSON + 註解(+ 部分工具允許尾逗號)。 它沒有官方規格,而是各家工具約定俗成,由解析器在讀取前「剝掉註解再解析」。

JSONC · 原始碼
{
  // 這是單行註解
  "name": "My App",
  /* 這是多行
     註解 */
  "port": 8080,   // 行尾註解
  "debug": true,   // 有些工具也允許尾逗號
}

注意「尾逗號」並非 JSONC 的標準共識——VS Code 的 JSONC 允許,其他工具未必。保守起見別寫。

誰在用 JSONC

工具說明
VS Codesettings.jsontasks.json 實為 JSONC
tsconfig.jsonTypeScript 設定,可用註解(VS Code 內)
jsconfig.json同上
重要:VS Code 會用檔案語法提示區分:JSON(嚴格)與 JSONC(含註解)。 看到「JSONC」字樣,代表可以寫註解;看到「JSON」,寫了會標紅。

JSON5 · 更寬鬆的 JSON

JSON5 是正式的「JSON for Humans」提案(json5.org), 在 JSONC 的註解之外,還放寬更多語法。設計目標:讓「合法的 JavaScript 物件字面值」幾乎都能直接當 JSON5 用。

JSON5 · 原始碼
{
  // 註解 OK
  unquotedKey: '單引號也可以',   // 無引號鍵 + 單引號值
  trailingComma: 1,          // 尾逗號 OK
  hex: 0xFF,                  // 十六進位
  inf: +Infinity,             // Infinity / NaN
  leadingZero: 0.5,         // 前導零也可以 .5
  multiline: "字串可以\n換行"    // 多行字串
}

JSON5 多加了什麼

語法JSONJSON5
註解 ///* */
單引號字串
無引號鍵
尾逗號
十六進位 0xFF
前導/尾隨小數點 .55.
+Infinity / NaN
字串內多行

JSON Lines · 每行一筆

JSON Lines(又稱 NDJSON / JSONL)不是 JSON 的「寬鬆化」, 而是一個不同的串流格式:每一行是一個獨立的 JSON 值,行與行以換行分隔。

JSON Lines · 原始碼
{ "time": "2026-08-15T10:00:00Z", "level": "info", "msg": "start" }
{ "time": "2026-08-15T10:00:01Z", "level": "error", "msg": "boom" }
{ "time": "2026-08-15T10:00:02Z", "level": "info", "msg": "done" }

JSON Lines 的優點

典型用途:伺服器日誌(Logstash、Datadog)、匯出大型資料集、串流事件、 以及希望資料可用 tail -f 即時觀看的場景。副檔名常用 .jsonl.ndjson

三種格式對比

特性JSONJSONCJSON5JSON Lines
註解
尾逗號部分 ✅
單引號 / 無引號鍵
官方規格✅ ECMA-404❌ 約定俗成✅ json5.org✅ jsonlines.org
主要目的機器交換設定檔加註解人更好寫串流/日誌
典型代表API、傳輸VS Code、tsconfigBabel 等專案設定日誌、匯出

如何辨識與使用

看完這頁你應該能說出:
  • 為什麼需要延伸格式。
  • JSONC = JSON + 註解;VS Code 的 settings.json / tsconfig.json 是實例。
  • JSON5 比 JSONC 多放寬了哪些(單引號、無引號鍵、尾逗號、十六進位、Infinity)。
  • JSON Lines 是「每行一筆」的串流格式,適合日誌與大資料。
  • 三種格式的適用場景與辨識方式。

延伸閱讀