JSON 工具箱

常見問題

把站內工具與 JSON 規範裡被問得最多的問題按場景歸攏,每個問題給出能直接照做的答案,而不是泛泛而談的結論。

25 篇文章

本分類文章

JSON 可以寫註解嗎

RFC 8259 沒有註解語法,`//` 與 `/* */` 都會讓 JSON.parse 直接拋錯。要寫說明只有四條路:改用 JSON5/JSONC、把備註塞進資料欄位、寫進 Schema 的 description,或改用 YAML。

入門約 3 分鐘更新於 2026-10-30

JSON 尾逗號為什麼會報錯

尾逗號在 JavaScript 裡合法,在 JSON 裡是語法錯誤。本文給出報錯原文、RFC 依據、三種改法,以及為什麼不要靠「刪逗號」蒙混過介面。

入門約 3 分鐘更新於 2026-10-30

BOM 會導致 JSON 解析失敗嗎

UTF-8 BOM 是檔案開頭三個看不見的位元組 EF BB BF,JSON.parse 讀到就直接拋錯,而且錯誤位置通常報在第 1 行第 1 列,看起來像檔案是空的。

入門約 4 分鐘更新於 2026-10-30

NaN 和 Infinity 能放進 JSON 嗎

JSON 只有十進位數字字面量,沒有 NaN、Infinity、-Infinity。JSON.stringify 會靜默把它們變成 null,介面因此出現過大量「明明是數字卻收到 null」的故障。

入門約 3 分鐘更新於 2026-10-30

大整數為什麼變成 9007199254740992

超過 2^53-1 的整數在 IEEE 754 雙精度裡無法精確表示,JSON.parse 會靜默把末位改掉。訂單號、雪花 ID、金額都踩過這個坑,正確解法是全程當字串傳。

進階約 4 分鐘更新於 2026-11-04

中文為什麼變成 \u4e2d\u6587

\u4e2d\u6587 是合法的 Unicode 轉義,不是編碼錯誤。真正的亂碼是「测试」這種。分清楚兩者,才知道該改序列化設定還是改檔案編碼。

入門約 3 分鐘更新於 2026-10-30

JSON、JSON5、JSONC 有什麼差別

三者是嚴格包含關係:JSON 是標準,JSONC 只多註解,JSON5 還多單引號、無引號鍵、尾逗號、十六進位與多行字串。選錯格式的代價通常在「介面不認」而不是「讀不出來」。

入門約 4 分鐘更新於 2026-10-30

JSON 和 YAML 該怎麼選

JSON 用括號劃邊界、YAML 用縮排表達層級。機器互動選 JSON,人寫設定選 YAML;兩者可以互轉,但註解、錨點、多文件這些特性在轉換中會丟。

入門約 4 分鐘更新於 2026-10-30

JSONPath 和 JSON Pointer 該怎麼選

JSON Pointer 是「唯一路徑」,寫法固定、能直接當 key 用;JSONPath 是「查詢語言」,支援通配、遞迴、過濾。選錯的典型症狀是拿 JSONPath 去做設定讀寫,或拿 Pointer 去做批次篩選。

進階約 4 分鐘更新於 2026-10-30

JSON Schema 到底能解決什麼問題

Schema 管的是結構與型別,管不了業務語意。它能把「欄位缺失、型別錯、枚舉越界」擋在入口,但「金額為負、結束時間早於開始時間」這類規則,得靠程式碼驗證。

進階約 4 分鐘更新於 2026-10-30

draft-07 和 2020-12 該用哪個

2020-12 是當前推薦版本,`$defs`、`prefixItems`、`unevaluatedProperties` 都在這裡;但很多舊驗證器、程式碼產生器仍只認 draft-07。選版本的依據不是新舊,而是「鏈路上每個工具都支援哪個」。

深入約 4 分鐘更新於 2026-10-30

Schema 怎麼產生 TypeScript 型別

用 json-schema-to-typescript 或 quicktype 一行指令就能產出 .d.ts,但產生結果只是起點:可選欄位、聯合型別、`additionalProperties` 的對映都需要人工確認,否則型別看著對、用起來處處報錯。

進階約 4 分鐘更新於 2026-10-30

大 JSON 解析很慢怎麼優化

優化順序錯了,換什麼函式庫都沒用。先量出時間花在解析、渲染還是請求上,再按「減少解析次數 → 串流處理 → 移到 Worker → 換二進位格式」逐級加碼。

進階約 5 分鐘更新於 2026-10-30

__proto__ 注入是怎麼回事

攻擊者把 `__proto__` 當普通鍵傳進來,深拷貝或合併函式一遞迴,原型就被改了。之後全站物件都多出攻擊者控制的屬性,輕則邏輯錯亂,重則繞過權限判斷。

深入約 5 分鐘更新於 2026-10-30

JSON 裡的 XSS 是怎麼發生的

JSON 本身不會執行,XSS 發生在「把 JSON 當 HTML 用」的那一步。伺服器拼頁面、前端用 innerHTML、把 JSON 直接塞進 `<script>` 標籤,是三個最常見的入口。

進階約 4 分鐘更新於 2026-10-30

線上 JSON 格式化會上傳資料嗎

判斷一個線上 JSON 工具是否會傳資料,不用看隱私政策,看網路面板就夠了:格式化時有沒有 XHR 請求、頁面能不能斷網使用、資料在重新整理後是否還在。

入門約 3 分鐘更新於 2026-10-30

線上工具支援多大的 JSON 檔案

沒有統一上限,真正卡住你的是瀏覽器分頁的記憶體預算:一份 20MB 的 JSON 解析後通常膨脹到 60–100MB,再疊加渲染節點,幾百 MB 就崩了。

入門約 3 分鐘更新於 2026-10-30

介面回傳的 JSON 該用什麼結構

三種常見結構各有代價:裸回傳最簡潔但擴充時要破壞相容;固定信封安全但冗餘;JSON:API 規範完整但重。中小型專案最實用的是「HTTP 狀態碼表結果 + 固定信封包業務資料」。

進階約 4 分鐘更新於 2026-10-30

JSON 裡的時間欄位該用什麼格式

時間戳和字串各有取捨,但混用一定出事。建議統一用 ISO 8601 帶時區偏移(或 UTC 的 Z 結尾),儲存用 UTC,展示在前端按使用者時區轉換。

入門約 3 分鐘更新於 2026-10-30

空值用 null 還是省略欄位

`null` 表示「這個欄位存在,但沒有值」,省略表示「這個欄位不存在」。PATCH 介面、設定合併、前端表單回填三處最容易因此出錯,判斷標準是「消費方需不需要知道這個欄位被顯式清空」。

進階約 3 分鐘更新於 2026-10-30