使用說明

JS 轉 JSON:JavaScript 物件變成嚴格 JSON

貼上含有沒加引號的鍵、單引號、註解或結尾逗號的 JavaScript 物件,就能得到嚴格且已跳脫的 JSON。這個 JSON 轉換器用剖析器讀取文字,絕不會把它當成程式碼執行,所以你可以直接貼上主控台、設定檔或程式碼範例裡的文字。


JS 轉 JSON 的步驟

  1. 把物件貼到「JavaScript 物件或 JSON」欄位。貼上時會立刻轉換。如果是自己輸入,停下來約 300 毫秒後結果才會更新。
  2. 在「格式」選擇結果的樣子:壓縮(預設,單行)、2 個空格或 4 個空格。
  3. 在「嚴格 JSON」下方查看結果。下面會出現「已轉換為嚴格 JSON。」和字元數。
  4. 按結果正下方的「複製」。按鈕會短暫顯示「已複製」。
  5. 按「清除」可以清空欄位,重新開始。

舉個小例子:你貼上 {name: 'Ana', tags: ['a', 'b',], id: 0xFF}。選擇壓縮時,結果是 {"name":"Ana","tags":["a","b"],"id":255}。

可以讀取的寬鬆 JavaScript 語法

文字會用 JSON5 剖析器讀取,它了解 JavaScript 物件寫法和 JSON 的差別。下列每一種寫法都會被轉換,而不是被拒絕:

字串裡的引號、反斜線和換行會自動跳脫:'He said "hi"' 會變成 "He said \"hi\""。本來就是有效 JSON 的內容,除了你選的版面之外都會原樣通過。

壓縮成一行,或用 2 個、4 個空格縮排

「格式」選單在結果上方。壓縮會把所有內容寫成一行、不留空格,適合用在請求內容、測試資料,或要貼進字串裡的值。

2 個空格和 4 個空格會產生有縮排的版面,比較好讀,也比較容易比對差異。你一選擇,結果就會改變,「複製」複製的就是你看到的內容。

無法讀取的內容與錯誤訊息

只接受資料,不接受程式碼。剖析器停下來時,會出現標題為「無法讀取這段內容」的紅色方塊,說明明確的原因和位置,例如「第 1 行,第 6 列」。像 {a:1 b:2} 會停在 b,並提醒你檢查它前面是否少了逗號、冒號、括號或引號。如果文字結束時還有括號、大括號或引號沒有關閉,就會改為顯示「文字太早結束了」。

數字、重複的鍵與其他會改變的地方

結果由瀏覽器本身的 JSON.stringify 產生,所以數字是 JavaScript 的數字。複製之前,值得先知道這些影響:

如果資料本來就是有效的 JSON,只想加上縮排而且不改動任何一位數字,請用「JSON格式化工具」。要依結構描述檢查 JSON,請用「JSON Schema 驗證器」。

限制與隱私


常見問題

JS 字串或物件要怎麼轉 JSON?

把物件的文字貼到「JavaScript 物件或 JSON」欄位。貼上時會立刻轉換,自己輸入的話則是停下來約 300 毫秒後轉換,嚴格的 JSON 會出現在「嚴格 JSON」下方。按「複製」就能帶走。請只貼物件本身,不要連 const data = {...}; 這樣的一行一起貼。

怎麼把單引號改成雙引號?

貼上文字就可以了。每個單引號字串都會變成雙引號,裡面的雙引號會自動跳脫,所以 'He said "hi"' 會變成 "He said \"hi\""。只有字串和鍵會被改動,雙引號字串裡的撇號會維持原樣。

怎麼拿掉 JSON 最後一個逗號?

貼上文字就可以了。物件或陣列最後一項後面的逗號,例如 [1, 2,],輸入時可以接受,結果的「嚴格 JSON」裡不會有它。資料的其他部分都不會改變。

JSON 可以有沒加引號的鍵或註解嗎?

嚴格的 JSON 不行:每個鍵和字串都要用雙引號,也沒有註解語法。JavaScript 物件和設定檔常常兩者都有。這個工具會讀取它們,把鍵改寫成雙引號,並移除註解,所以結果是有效的 JSON。

JSON 和 JSON5 有什麼不同?

JSON5 是比 JSON 寬鬆的超集,允許沒加引號的鍵、單引號字串、結尾逗號、註解、十六進位數字,以及其他幾種 JavaScript 風格的寫法。這個工具會讀取這些語法並寫出一般的 JSON,所以沒有不支援數值的 JSON5 文件,會變成任何剖析器都能接受的 JSON。

怎麼把 JSON 壓縮,或用 2 個、4 個空格縮排?

使用結果上方的「格式」選單。預設的「壓縮」會輸出沒有空格的單行。2 個空格和 4 個空格則是有縮排的版本。你選了其他選項,結果和「複製」帶走的內容就會立刻改變。

為什麼會顯示「無法讀取這段內容」?

因為這段文字不是剖析器看得懂的物件、陣列或值。紅色方塊會指出停下來的位置,例如「第 1 行,第 6 列」,以及該檢查什麼:前面是否少了逗號、冒號、括號或引號,或結尾還有括號、大括號、引號沒有關閉。像 const x = {...} 這樣的敘述、結尾的分號、反引號字串、undefined、函式和 new Date() 都不接受。請只貼上物件。

我貼上的 JavaScript 會被執行嗎?

不會。文字由剖析器(JSON5)讀取,絕不會經過 eval,所以你貼上的內容不可能運行。程式碼會被拒絕也是同樣的原因:函式、變數名稱或 new Date() 是錯誤,而不是要拿來計算的東西。

JSON.stringify 用法和這個工具有什麼不同?

結果是用 JSON.stringify 產生的,所以輸出規則相同。差別在輸入:JSON.stringify 需要程式碼裡真正的物件,而這裡是貼上物件的文字,寬鬆語法也可以。數字會變成 JavaScript 的數字,只有到 9007199254740991 為止是精確的,所以 12345678901234567890 會輸出成 12345678901234567000,1.0 會變成 1。NaN、Infinity 和 -Infinity 會變成 null,重複的鍵則以最後一個值為準。上限是 5,000,000 個字元,轉換在你的裝置上進行,不會上傳或儲存。