JSON 轉 JavaScript 物件轉換工具

嚴格 JSON 可以用 JSON.parse 轉換為 JavaScript 物件;JavaScript 物件字面值則需要先整理一遍才能成為合法 JSON。

在 JavaScript 裡轉換 JSON

如果輸入已經是合法 JSON,最安全的轉換器是 JSON.parse(jsonText)。它會回傳一般的 JavaScript 物件、陣列、字串、數字、布林或 null,而且不會執行任何程式碼。

JSON 輸入

{ "name": "Ada", "active": true, "skills": ["math", "notes"] }

JavaScript 用法

const user = JSON.parse(jsonText); console.log(user.name);

物件字面值輸入則不一樣

{ name: 'Ada', active: true } 這種 JavaScript 物件字面值不是 JSON。在拿它走 JSON.parse 之前,要先修復未加引號的鍵、把單引號改成雙引號、刪掉註解與尾隨逗號。

什麼時候不要用 eval

不要用 eval 把未知文字變成物件。eval 會執行程式碼,而 JSON.parse 只解析資料 —— 這正是嚴格 JSON 在 API 負載、設定、日誌與貼上的範例中更安全的原因。

邊界情況:日期、undefined、函式

JSON 沒有 Date、undefined、函式這些型別。日期透過 ISO 字串往返;undefined 在 stringify 時會被丟掉;函式完全無法表示。如果 JavaScript 物件含有這些值,轉出的 JSON 只是個有失真的快照 —— 必要時用 JSON.parse 的 reviver 函式來明確還原型別。

TypeScript 與型別推論

JSON.parse 的回傳型別是 'any',因為解析器無法事先知道形狀。要拿到帶型別的存取,可以在用 zod、io-ts 這類 schema 程式庫驗證之後寫 JSON.parse(text) as User;也可以用本站的 JSON 轉 TypeScript 工具,從範例產生介面。

反方向:物件轉 JSON

JSON.stringify(value, null, 2) 會從 JavaScript 值產生格式化的 JSON。它會默默丟掉 undefined、函式與 Symbol 鍵;遇到循環參考會丟出例外。第二個參數可以傳 replacer 函式來控制保留哪些欄位 —— 在把物件送出去之前剝離內部細節時很有用。