ToolAct工具行動

JSON 轉義工具

快速對 JSON 字串進行轉義和反轉義處理

輸入內容
字元數: 0
字節數: 0
轉換結果
字元數: 0
字節數: 0

選擇轉換方式

什麼是 JSON 轉義?

JSON 轉義是將 JSON 字串中的特殊字元轉換為轉義序列的過程。常見的轉義字元包括:" 轉為 \"\\ 轉為 \\\\,換行符轉為 \n,製表符轉為 \t 等。

使用場景:當需要在 JSON 字串中嵌入另一個 JSON、在程式碼中定義 JSON 字串常量、或在資料庫中儲存 JSON 資料時,都需要進行轉義處理。

實際使用時還要區分「字串轉義」和「完整 JSON 序列化」:前者只處理文字中的特殊字元,後者會同時考慮物件、陣列、數字、布林值與空值,混用容易造成多重轉義或解析失敗。

使用方式

使用方式

  1. 在輸入框中貼上或輸入文字
  2. 點選「JSON Escape」轉義特殊字元(例如「"」變為「\"」)
  3. 點選「JSON Unescape」還原已轉義的字元(例如「\"」變為「"」)
  4. 結果會自動顯示在下方,可直接複製

轉義注意事項

  • 僅針對目標環境進行轉義;JSON 字串、JavaScript 原始碼、URL 和 HTML 屬性各有不同的轉義規則。
  • 還原轉義後,貼入設定檔前請檢查換行符號、反斜線和引號是否正確。

使用場景

安全地將文字嵌入 JSON 字串當錯誤訊息、SQL 片段、正則表達式、Windows 路徑或多行提示詞需要成為 JSON 字串值時,轉義模式會將引號、反斜線、換行和控制字元轉換為 JSON 安全的跳脫序列。字元數和位元組數的統計能幫助你在貼入 API 請求前察覺 payload 的增長。所有處理都在瀏覽器端透過標準 JSON.stringify 步驟完成,原始字串不會離開頁面。
從日誌中讀取已轉義的內容API 閘道和日誌系統經常顯示帶有跳脫換行和引號的 JSON 字串值。反轉義模式會將這些序列還原為可讀文字,方便檢查堆疊追蹤、序列化的提示詞、Webhook 主體和複製的設定值。反轉義使用瀏覽器的 JSON.parse 路徑,還原的字元只會出現在輸出欄位中,直到你自行複製。
在本機測試文字的往返轉換由於工具依賴瀏覽器的 JSON 解析器和序列化器,它遵循標準的 JSON 字串轉義規則而非自訂格式。這使它成為檢查數值能否安全放入 JSON 文件的本機草稿區。輸入字串僅在瀏覽器端處理,不會發起 API 呼叫,因此包含堆疊追蹤、提示詞或未發布文案的草稿永遠不會經過網路。
為 JSON 嵌套欄位轉義數值當 Webhook payload 必須將序列化的 JSON 物件作為字串欄位的值時,先將內部 JSON 經過轉義模式處理,讓外層解析器仍能將其視為單一字串。在接收端搭配反轉義來確認往返完整性,然後再正式發布。由於轉義是本機的 stringify 操作,你可以測試巢狀引號或嵌入的 \u 序列等邊界情況,而不會將合約暴露給外部工具。
找出隱藏在複製文字中的控制字元從終端機、PDF 或聊天應用程式貼上的文字經常包含 NUL 位元、BEL 或零散的 CR 字元,這些會悄悄破壞下游的 JSON 解析器。轉義會將它們顯示為 \u0000 格式的序列,方便檢查和移除,避免讓文件變成無效區塊。掃描完全針對頁面內的 JSON 編碼器進行,因此包含私密片段的貼上字串只在瀏覽器分頁內被顯示和重寫。

技術原理

JSON(RFC 8259)是嚴格的文字語法;每個字串字面值必須以 ASCII 雙引號(U+0022)包裹,任何可能破壞該語法的字元都必須以反斜線跳脫序列表示。強制跳脫的字元包括:雙引號跳脫為反斜線引號、反斜線跳脫為雙反斜線,以及 U+0000 到 U+001F 的 32 個控制字元(包含 \b U+0008、\f U+000C、\n U+000A、\r U+000D、\t U+0009)。U+001F 以上的任何字元都可以其原始 UTF-8 位元組序列出現在字串中,包括 CJK 表意文字、表情符號、帶重音字母及其他增補字元。正斜線字元的跳脫是可選的(\/),但慣例是在 JSON 嵌入 HTML <script> 標籤時跳脫它,以免關閉腳本標籤序列過早結束周圍的 script 元素。 實務中會出現兩層跳脫。JSON 跳脫(語法替換)是 RFC 8259 唯一要求的:它確保字串是合法的 JSON,僅此而已。Unicode 跳脫(將每個字元改寫為 \uXXXX 或 \u{XXXXX})是一種表示選擇,而非語法要求——它只改變位元組在檔案中的呈現方式,不改變其解碼結果。CJK 文字在 JSON 中以原始 UTF-8 位元組形式已屬合法;頁面的 Unicode 跳脫模式將其改寫為 \uXXXX,適用於將字串餵入 Java 或 JavaScript 原始碼檔案的場景(周圍的解析器否則需要處理多位元組 UTF-8),但每字元會增加 4-6 個位元組並降低可讀性。 跳脫規則存在邊界情況。JSON.parse 對前導零很嚴格(01 是解析錯誤,即使 JavaScript 會將其接受為八進位 1);V8 的 JSON.stringify 始終產生最小必要跳脫(控制字元盡可能使用 \b/\n/\r/\t/\f,否則使用 \uXXXX,而正斜線 /、U+2028、U+2029 保持原樣以利人類可讀輸出)。孤立代理項(高代理項後未跟隨低代理項)在 RFC 8259 中技術上是合法的 JSON,但嚴格模式或 TypeScript 中的 JSON.parse 會將其拒絕為 InvalidString;頁面的跳脫模式會將孤立代理項替換為 \uFFFD(替代字元),使輸出能通過任何標準解析器的往返測試。 對於 JavaScript 原始碼嵌入,JSON 字串需要第三層跳脫:JS 字串字面值中的 JSON 必須跳脫反斜線本身。頁面的 JS 字串輸出模式新增了該雙重跳脫,eval 或 JSON.parse 按鈕可證明兩種編碼解碼為相同的字串。嵌入 HTML 的情境新增第四層:<、>、& 在周圍頁面中需要 HTML 實體跳脫,屬性值也需要引號跳脫。JSON-in-HTML 是眾所周知的危險場景(上述 </script> 陷阱),最好避免,改用安全的接收端如 textContent 賦值或 JSON.stringify 放入 <script type="application/json"> 區塊(透過 script.textContent 讀取,絕不使用 eval)。 JSON5(流行的超集)新增了單引號字串、多行字串、無引號鍵、尾隨逗號、NaN/Infinity 和單行 // 註解。本頁面不產生 JSON5 輸出;如需往返轉換,請使用專用函式庫。

  • JSON 字串(RFC 8259)必須跳脫雙引號為反斜線引號、反斜線為雙反斜線,以及 U+0000..U+001F 的 32 個控制字元(\b \f \n \r \t,其餘為 \uXXXX)。U+001F 以上均為合法的原始 UTF-8,包括 CJK、表情符號和帶重音字母。
  • 兩層「跳脫」同時存在:JSON 跳脫(語法性,必要)使字串成為合法 JSON;Unicode 跳脫(表示性)將字元改寫為 \uXXXX,僅改變可讀性,不改變有效性。
  • 可選的 '/':JSON 允許 / 跳脫為 \/。慣例:嵌入 HTML <script> 中的 JSON 時跳脫它,以免關閉腳本標籤序列結束周圍的標籤。
  • 原始 UTF-8 JSON 中 CJK 不被跳脫:範例「你好」是 6 個原始位元組。頁面的 Unicode 跳脫模式將其改寫為 \u4f60\u597d,用於原始碼檔案,以可讀性換取相容性。
  • 孤立代理項:高代理項(U+D800..U+DBFF)後未跟隨低代理項在 RFC 8259 中技術上是合法的 JSON,但嚴格模式或 TypeScript 中的 JSON.parse 會拒絕它。頁面將孤立代理項替換為 \uFFFD,使輸出能通過嚴格解析器的往返測試。
  • JSON.parse 很嚴格:前導零(01)是解析錯誤,NaN/Infinity 不是合法字面值,尾隨逗號不允許。V8 的 JSON.stringify 始終產生最小必要跳脫,正斜線 / 和 U+2028/U+2029 保持原樣以利可讀性。
  • JSON-in-JS:要在 JS 字串字面值中嵌入 JSON 字串,需將反斜線加倍。頁面的「JS 字串」輸出新增了該層;對結果執行 eval 與 JSON.parse 會得到相同的字串。
  • JSON5 超集:單引號字串、多行字串、無引號鍵、尾隨逗號、NaN/Infinity、單行 // 註解。頁面產生嚴格的 RFC 8259 JSON,而非 JSON5。

範例

含雙引號與反斜線的字串

輸入:  He said "Hello\World"
輸出: He said \"Hello\\World\"

含換行與 Tab 的字串

輸入:  Line1\tIndent\nLine2
輸出: Line1\tIndent\nLine2

含中文與雙引號的字串

輸入:  {"name": "Alice", "msg": "He said \"Hi\""}
輸出: {\"name\": \"Alice\", \"msg\": \"He said \\\"Hi\\\"\"}

常見問題

對 JSON 字串進行轉義會做什麼?

它會將輸入用引號包起來,並把每個特殊字元替換為 JSON 安全的逸出序列:" → \"、\ → \\、換行 → \n、Tab → \t、控制字元 → \u00NN。輸出會是一個合法的 JSON 字串字面值,可以直接貼到另一份 JSON 文件或程式碼編輯器中。

我為什麼會需要這個?

常見場景:在 JSON 設定檔中嵌入多行訊息、把 JSON 字串當作命令列參數傳入、在 JSON 內再放入 JSON(例如 API 請求主體本身就是經過 JSON 編碼的字串),或在記錄日誌前先消毒使用者輸入。

JSON 轉義跟 URL 編碼是同一件事嗎?

不是。JSON 轉義使用 \n、\"、\u00XX;URL 編碼使用 %20、%22、%0A。語法情境不同,逸出規則也不同。請依據目的端格式選擇對應方式。

反轉義模式能處理所有 JSON 逸出序列嗎?

可以——所有標準逸出序列(\"、\\、\/、\b、\f、\n、\r、\t、\uXXXX)都支援。位於 U+FFFF 以上的代理對(surrogate pair,例如 \uD83D\uDE00 = 😀)會被重新組合為實際的表情符號。格式錯誤的逸出序列會回報錯誤,方便您修正。

字串轉義和物件序列化有什麼不同?

轉義是把一段文字變成帶引號的 JSON 字串。序列化(JSON.stringify)則是把 JavaScript 物件轉成完整的 JSON 文件。本頁做的是前者;後者請在程式碼編輯器中將物件寫成 JSON,或使用 JSON 格式化工具。

控制字元一定會被轉義嗎?

會——這是 JSON 規範要求的。換行、Tab、NULL 以及其他 ASCII 控制字元(0x00–0x1F)必須轉義,否則結果就不是合法的 JSON。部分實作也會逸出 DEL(0x7F)以及 U+FFFF 以上的字元;本頁嚴格遵循 RFC 8259。

資料會被傳送到任何地方嗎?

不會。轉義與反轉義都在您的瀏覽器中執行。貼上的文字不會被上傳。