JSON 是什麼
JSON(JavaScript Object Notation)是一種用文字表示資料的格式。API 回應、設定檔、資料匯出最常用它。標準是 RFC 8259。
JSON 只有六種值:物件 {}、陣列 []、字串、數字、true/false、null。規則比 JavaScript 嚴格:
- 物件的鍵(key)一定要用雙引號。
- 字串一定要用雙引號,不能用單引號。
- 最後一個元素後面不能有逗號。
- 不能有註解。
- 數字不能有前導零(
01),也不能是NaN或Infinity。
「格式化」只是加上縮排與換行,資料本身不變。結構符號前後的空白在標準裡屬於「不重要的空白」,加或減都不影響內容。
使用情境
- 看懂 API 回應。 從瀏覽器開發者工具或
curl複製出來的 JSON 常擠成一行。格式化後,巢狀結構和欄位一目了然。 - 找出設定檔為什麼讀不進去。 多數 JSON 設定檔(例如
package.json)不接受註解和尾逗號;只有少數工具明寫支援。驗證後會指出錯誤的位置。 - 壓縮後放進環境變數或資料庫欄位。 有些地方只接受一行文字。壓縮會移除所有不重要的空白,內容不變。
範例
輸入(一行):
{"name":"小明","age":28,"tags":["dev","ios"],"active":true,"note":null}輸出(縮排 2 格):
{
"name": "小明",
"age": 28,
"tags": [
"dev",
"ios"
],
"active": true,
"note": null
}「壓縮」會把上面的輸出還原成原本那一行。
常見錯誤
- 最後多一個逗號(尾逗號)。
{"a": 1,}在 JavaScript 物件裡合法,在 JSON 裡不合法。刪掉}或]前面的逗號。 - 用了單引號,或鍵沒加引號。
{'a': 1}和{a: 1}都不是 JSON。把鍵和字串都改成雙引號。 - 放了 `NaN`、`undefined` 或註解。 這些都不是 JSON 的值。
NaN可改成null;註解要刪掉,或改用另一個欄位說明。 - 數字有前導零。
{"zip": 01}不合法。郵遞區號、電話這種要保留前導零的資料,請存成字串"01"。 - 超大整數被悄悄改掉。 瀏覽器用 64 位元浮點數存 JSON 數字。超過 9007199254740991(2⁵³−1)的整數會失去精度。例如
9007199254740993讀進來會變成9007199254740992。訂單編號、推文 ID 這類大整數,請存成字串。本工具格式化後也會受這個限制影響。
常見問題(FAQ)
- 格式化會改變我的資料嗎?
- 不會改變內容,只加減縮排與換行。唯一的例外是超過 2⁵³−1 的大整數:瀏覽器讀取時會失去精度。遇到這種數字,本工具會提示你。
- JSON 可以寫註解嗎?
- 標準 JSON 不行。有些工具(例如 VS Code 的設定檔)接受「JSONC」這種加了註解的變體,但那不是標準 JSON,送給一般 API 會出錯。
- 錯誤訊息說第幾行、第幾個字,要怎麼看?
- 位置指的是解析器「發現看不懂」的地方,真正的錯誤常在它前面一點。例如少了一個逗號,錯誤會指到下一個鍵的開頭。往前檢查一兩行通常就能找到。
- JSON 一定要用 UTF-8 嗎?
- 在不同系統之間交換時,RFC 8259 規定必須用 UTF-8。中文可以直接寫,也可以寫成
\u5c0f(代表「小」)這種跳脫形式,兩者代表同一個字。 - 我貼上的 JSON 會被上傳嗎?
- 不會。解析與排版都在你的瀏覽器裡計算,資料不會送到伺服器。API 回應裡常有權杖或個資,即使如此,仍建議先遮掉敏感欄位再貼。
來源(查核日期 2026-10-21)
- RFC 8259〈The JavaScript Object Notation (JSON) Data Interchange Format〉:第 2 節(不重要的空白)、第 6 節(不允許 NaN 與 Infinity;整數在 [−(2⁵³)+1, (2⁵³)−1] 內才能確保互通)、第 8.1 節(系統間交換必須用 UTF-8):https://www.rfc-editor.org/rfc/rfc8259
- MDN〈JSON.parse()〉:不合法時丟 SyntaxError;陣列與物件不能有尾逗號:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse