JSON 格式化工具
在瀏覽器中格式化、壓縮並驗證 JSON,會指出語法錯誤的行號與欄位,也可排序鍵名。你貼上的內容不會上傳。
在你的瀏覽器中執行
格式化其實就是驗證
要把 JSON 排版,就必須先解析它,所以任何能幫你排好版的工具,其實已經告訴你這份文件是否合法。 上面的工具每按一次鍵就重跑一次:只要右邊持續產生結果,這份 JSON 就是合法的。
若不合法,訊息會指出解析器放棄的行號與欄位。那是錯誤被「發現」的位置,未必是錯誤發生的位置 ——第 12 行少了一個逗號,通常會回報在第 13 行的開頭,因為那才是第一個接不下去的符號。
四種常見的「不是 JSON」
大多數「JSON 格式錯誤」其實是合法的 JavaScript,這正是混淆的來源。JSON 是嚴格的子集:
| 寫法 | 為什麼不合法 |
|---|---|
{name: "x"} | 鍵名必須是雙引號字串 |
{'name': 'x'} | JSON 不接受單引號 |
{"a": 1,} | 結尾多餘的逗號是語法錯誤 |
// 說明 | JSON 沒有註解,任何位置都不行 |
NaN、Infinity、undefined 同樣不存在,它們是 JavaScript 的值,在 JSON 裡沒有對應的表示法。
JSON 的數字是有限的十進位數,可以帶指數。
大整數在來回轉換中會失真
JSON.parse 產生的是 JavaScript 數字,也就是 IEEE-754 雙精度浮點數。超過 2^53 − 1
(9007199254740991)的整數會無聲地失去精度:
JSON.parse('{"id": 9007199254740993}').id // 9007199254740992
X(Twitter)的 snowflake ID、Discord ID,以及 64 位元的資料庫主鍵都落在這個範圍,這也是為什麼 使用它們的 API 會把 id 序列化成字串。如果重新格式化之後 id 差了 1,原因就在這裡,而且是解析器 造成的,不是格式化造成的。這類值請保持字串形式。
排序鍵名
在 JSON 規格裡物件的鍵沒有順序意義,但實務上每個解析器都會保留原順序。要比對兩份資料相同、 順序不同的文件,把兩邊都排序是最省事的做法。陣列則不會被動到:陣列的順序本身就是資料。
你的資料只留在這裡
解析與輸出都在你的瀏覽器完成。你貼上的內容不會傳送到任何地方——對 JSON 來說這件事比其他格式 更重要,因為 API 的內容經常夾帶權杖、個資與內部識別碼。