fixmint
ZH-TW

JSON 解析錯誤最常見的原因,以及如何修正

作者: · · 更新於 2026年11月8日 · 閱讀約 5 分鐘

大多數 JSON 解析錯誤都來自幾種常見的錯誤:多餘的逗號、單引號字串、註解、沒有引號的鍵、像 NaN 或 undefined 這類的值,或是從文件複製來的彎引號。JSON 比它所類似的 JavaScript 嚴格,所以人眼看起來沒問題的程式碼,解析器可能會拒絕。錯誤訊息會指出行與欄的位置,而修正方法通常就在該位置或其前一個字元。

格式化 JSONJSON 無法解析免費使用

JSON 強制執行的規則

一份 JSON 文件就是一個值:大括號包住的物件、中括號包住的陣列、字串、數字、true、false 或 null。在這些值之中:

  • 每個鍵和每個字串都使用直引號(雙引號),例如 "name"。
  • 逗號用來分隔項目,物件或陣列的最後一個項目後面不能有逗號。
  • 數字不能有前置的加號;NaN、Infinity 和 undefined 都不是有效的數字或值。
  • 完全不允許註解。
  • 鍵必須是字串,所以沒有引號的鍵,例如 name:,是無效的。

有些解析器預設會接受其中幾項,有些工具為了方便也會接受含註解的 JSON。這種寬鬆會把問題隱藏起來,直到檔案交給更嚴格的讀取程式才爆發,所以請直接寫嚴格的格式。

讀懂錯誤訊息

解析器會回報它第一個無法繼續的地方。訊息會說明問題,並給出位置,通常是行和欄。以下是一個小檔案,陣列中有一個多餘的逗號,最後一個屬性後面又有一個:

{
  "name": "Ada",
  "tags": ["a", "b",],
}

Python 會回報:"Illegal trailing comma before end of array: line 3 column 20"。不同工具的措辭不一樣,有些較舊的解析器只會顯示 "Unexpected token" 加上字元位移。請前往回報的位置,然後看該位置前一個字元。真正的錯誤常常是在回報位置的前一兩個字元,可能是逗號、引號或大括號。

以下是 Python 解析器的其他幾則訊息,以及它們通常代表的意思:

  • 對於 '{'a': 1}',"Expecting property name enclosed in double quotes" 表示使用了單引號或沒有引號的鍵。
  • 在你預期數字或字串的位置出現 "Expecting value",通常是彎引號造成的,因為解析器把它當成無法辨識的字元。
  • "Expecting ',' delimiter" 通常代表兩個項目之間缺少逗號,或資料中間有註解。

彎引號與複製來的文字

彎引號是最容易讓人混淆的情況,因為它們看起來幾乎和直引號一樣。從文書處理軟體、網頁或聊天訊息複製來的 JSON 檔案,可能含有彎的雙引號。檔案在你眼中看起來正確,但解析失敗,因為解析器把 “x” 當成無法辨識的字元,而不是字串的界定符號。

隱藏字元也會造成同樣的失敗。兩個值之間的不換行空白,對解析器來說不是空白。在你手動修正結構之前,請先移除隱藏字元,接著再修正引號。彎引號指南說明如何安全地把它們改成直引號。

單引號、註解與沒有引號的鍵

許多開發者會用允許較寬鬆語法的語言撰寫類似 JSON 的資料:

  • 單引號在 JavaScript 和 Python 的字面值中是有效的,但 JSON 要求雙引號。請把 {'a': 1} 改成 {"a": 1}。
  • 必須移除 // 或 /* */ 這類註解。若需要備註,請把它們放在獨立的欄位中,或改用為設定檔設計的格式。
  • 沒有引號的鍵在 JavaScript 物件字面值中很常見,請加上引號。
  • NaN 和 undefined 不是 JSON。遺漏的值請用 null 表示,若值是文字則改用字串。

全面取代要小心。把每個單引號都改成雙引號,會破壞所有含撇號的字串,例如 "Ada's notes"。請先在尋找與取代中預覽每個符合項目,確認哪些引號會被更改。

逐步修正結構

  1. 把檔案貼到 JSON 格式化工具。格式化會讓結構清楚顯示,錯誤也會標示行與欄。接著按下修復,它會移除註解和多餘的逗號。它不會更改單引號或彎引號,所以這些請自行修正。
  2. 一次只修正第一個錯誤,然後重新檢查。一個錯誤可能會在後面產生好幾個錯誤。
  3. 確認每個開始的大括號或中括號都有對應的結束符號,且巢狀結構符合你的意圖。
  4. 用你的應用程式所使用的解析器來驗證最終檔案,不要只用網頁工具。不同解析器的細節略有差異。

能解析的檔案不一定就是你想要的檔案。依 JSON Schema 進行檢查,可以找出缺少的欄位或型別錯誤的值;或是比較兩份 JSON 文件,看看版本之間改了什麼。

特殊情況

  • 產生檔案中的多餘逗號。 有些工具會寫出它們。如果你是用字串手動組出 JSON,請使用你所用語言的序列化功能,它會寫出有效的輸出。
  • 重複的鍵。 JSON 允許重複的鍵,但大多數解析器只會保留最後一個值。重複的鍵是潛在的錯誤來源。
  • 大數字。 某些解析器對非常大的整數可能會失去精確度,所以如果識別碼長到解析器無法精確表示,請把它存成字串。CSV 轉 JSON 指南在談到 ID 時也提到了同樣的重點。

快速解答

為什麼我的 JSON 看起來正確卻會失敗?

常見原因是多餘的逗號、單引號、註解,或從文件複製來的彎引號。請檢查錯誤訊息中的位置,以及該位置前一個字元。

JSON 可以有註解嗎?

不行。JSON 標準不允許註解。請移除它們,或把備註移到獨立的欄位中。格式化工具的修復按鈕會替你移除這些註解。

在 JSON 中,undefined 應該改用什麼?

當某個值是刻意缺少時,使用 null,或直接省略該鍵。undefined 是 JavaScript 的值,在 JSON 中沒有對應的表示方式。

借助 AI 協助,由英文原文翻譯而成。

留言

    還沒有留言,搶先留言吧。

    您的評分(選填)

    您的電子郵件不會顯示,也不會被保存。

    How to Remain Valuable When Intelligence Becomes Cheap 的封面How to Remain Valuable When Intelligence Becomes Cheap

    224 頁,探討當 AI 能處理多數認知工作時,人類、經濟與策略上仍然稀缺的優勢。

    $3.84在 Gumroad 購買英文版