📋

JSON 格式化 & 驗證工具 常見問題

Q: 什麼是 JSON 格式化工具?

A: 什麼是 JSON 格式化工具?

JSON 格式化工具是一種將原始、壓縮或格式混亂的 JSON 資料重新格式化,加入適當的縮排、換行和空格,使其易於人類閱讀的工具。大多數 JSON 格式化工具還包含驗證、語法突顯、錯誤偵測等功能,有時還有鍵值排序、壓縮和樹狀檢視導航等附加功能。我們的免費線上 JSON 格式化工具將格式化和驗證整合在一個工具中,為您提供即時、清晰的輸出和詳細的錯誤報告。

Q: 為什麼我的 JSON 無效?

A: 為什麼我的 JSON 無效?

當 JSON 違反 JSON 規範的嚴格規則時,它就是無效的。最常見的原因包括:

  • 結尾逗號:物件或陣列中最後一個元素之後多餘的逗號
  • 缺少雙引號:物件鍵名或字串值沒有用雙引號包裹
  • 使用了單引號:使用單引號而非雙引號(單引號在 JSON 中無效)
  • 未轉義的特殊字元:字串中的反斜線或引號未正確轉義
  • 無效的值:如 undefinedNaNInfinity(這些在 JSON 中沒有對應類型)
  • 括號不匹配{/}[/] 沒有正確配對

使用 JSON 驗證器來精確定位語法錯誤的位置和性質。大多數驗證器會報告第一個遇到的錯誤所在的行號、列號以及描述性錯誤訊息。

Q: JSON 和 JavaScript 物件有什麼區別?

A: JSON 和 JavaScript 物件有什麼區別?

雖然 JSON 語法源自 JavaScript 物件字面量語法,但它們並非同一回事。主要區別包括:

  1. 鍵名必須使用雙引號:JSON 要求 {"key": "value"},而 JavaScript 允許 {key: "value"}(不加引號)和 {'key': 'value'}(單引號)。
  2. 字串值必須使用雙引號:JSON 只允許字串使用雙引號。JavaScript 同時接受單引號和雙引號。
  3. 不允許結尾逗號:JSON 禁止最後一個元素之後出現逗號。JavaScript 則允許。
  4. 有限的資料類型:JSON 僅支援字串、數字、布林值、null、物件和陣列。JavaScript 物件可以包含函數、undefinedDateMapSet 和其他特殊類型。
  5. 不支援註解:JSON 不支援註解。JavaScript 原始碼中的物件可以有註解。

這意味著你不能簡單地寫一個 JavaScript 物件就稱之為 JSON——它必須透過 JSON.stringify() 序列化,或按照嚴格的 JSON 規則書寫。

Q: JSON 可以有註解嗎?

A: JSON 可以有註解嗎?

不可以,官方 JSON 規範(RFC 8259)不支援註解。JSON 被設計為一種最小化的、語言無關的資料交換格式,故意排除了註解,以保持解析器在不同語言之間的簡單性和一致性。

如果你需要註解,有以下幾種選擇:

  • JSONC(帶註解的 JSON):VS Code 和其他工具用於設定檔的格式。JSONC 允許 // 行註解和 /* */ 區塊註解。
  • YAML 或 TOML:原生支援註解的替代設定檔格式。
  • 基於約定的元資料:在 JSON 物件中使用 "_comment""//" 等鍵名來儲存人類可讀的備註。注意,這會在資料中增加額外的內容。
  • 解析前移除註解:在將 JSON 傳遞給嚴格解析器之前,使用預處理步驟移除註解。

Q: 如何在線上驗證 JSON?

A: 如何在線上驗證 JSON?

線上驗證 JSON 非常簡單:

  1. 複製你的 JSON 資料
  2. 貼到 JSON 驗證工具
  3. 點擊驗證或格式化按鈕
  4. 工具會回報 JSON 有效,或顯示錯誤及其精確位置和問題描述

一個好的 JSON 驗證器應該:

  • 根據官方 JSON 規範(RFC 8259)驗證語法
  • 顯示錯誤所在的行號和列號
  • 提供描述性錯誤訊息,說明問題所在
  • 可選地同時格式化和美化 JSON
  • 以不同顏色突顯不同資料類型的語法

對於大型或敏感資料,許多線上驗證器會在瀏覽器中完全以客戶端方式處理,意味著你的資料永遠不會離開你的電腦。

Q: 壓縮 JSON 是什麼意思?

A: 壓縮 JSON 是什麼意思?

壓縮 JSON 是指移除了所有不必要空格的 JSON——空格、製表符、換行符和縮排全部被剝離。結果是單行(或極少行)的緊湊文字:

{"users":[{"id":1,"name":"Alice","roles":["admin"]}],"total":1}

在生產環境中使用壓縮 JSON 有以下幾個原因:

  • 較小的檔案大小:可以減少 30-50% 甚至更多的資料量
  • 更快的網路傳輸:傳輸的資料越少,延遲越低
  • 降低頻寬成本:對於高流量的 API 和行動應用尤其重要

代價是壓縮 JSON 對人類來說基本上無法閱讀。使用 JSON 美化工具將壓縮 JSON 重新格式化為可讀的結構,以便除錯或檢查。

Q: 如何在命令列中美化 JSON?

A: 如何在命令列中美化 JSON?

有幾種命令列工具可以美化 JSON:

使用 jq(最受歡迎,需另外安裝):

cat file.json | jq .

使用 Python(大多數系統內建):

python -m json.tool file.json

使用 Node.js:

node -e "const d = require('./data.json'); console.log(JSON.stringify(d, null, 2));"

使用 curl(美化 API 回應):

curl https://api.example.com/data | jq .

推薦使用 jq 工具,因為它具有彩色輸出、查詢能力和強大的錯誤處理。

Q: 什麼是 JSON Schema?

A: 什麼是 JSON Schema?

JSON Schema 是一種詞彙表,讓你能夠對 JSON 文件進行註解和驗證。它定義了 JSON 文件必須滿足的結構、資料類型和約束條件。可以將其視為 JSON 資料的合約或規範。

JSON Schema 的主要功能:

  • 類型驗證:指定值必須是字串、數字、布林值、陣列、物件還是 null
  • 必填欄位:將某些屬性標記為強制性的
  • 值約束:設定最小值/最大值、字串模式(regex)和允許的值(列舉)
  • 陣列驗證:控制陣列長度、元素類型和唯一性
  • 巢狀驗證:為巢狀物件和陣列定義 schema
  • 條件驗證:根據其他欄位的值應用不同的規則

JSON Schema 範例:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["name", "email"],
  "properties": {
    "name": { "type": "string", "minLength": 1 },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 }
  }
}

JSON Schema 通常用於驗證 API 請求主體、設定檔以及服務之間的資料交換合約。

JSON 格式化 & 驗證工具 常見問題 - CoolTool