JSON Stringify

免費線上 JSON Stringify / Parse 工具,一鍵將 JSON 物件序列化為帶引號、可直接嵌入程式碼或 URL 的字串,也支援反向解析還原 JSON 物件。

相關推薦

什麼是 JSON Stringify(JSON 序列化與字串嵌入)?

JSON Stringify(JSON 序列化)是把一個 JSON 物件(或陣列、值)轉換為一個符合 RFC 8259 規範的字串表示。在 JavaScript 中,標準做法是呼叫 `JSON.stringify(obj)`,它會輸出例如 `{"name":"Alice"}` 這種帶雙引號的字串——這一步只完成了「物件 → 字串」,結果本身仍然是合法 JSON,可以被任何 JSON.parse() 重新解析。

但實際工程中,開發者經常需要把序列化結果再「嵌入」到另一段文字裡——這才是 JSON Stringify 工具真正解決的問題:① 把 JSON 字串塞進 JavaScript / Java / Python / Go 源碼中作為變數初始值;② 把 JSON 字串儲存到資料庫的 TEXT 欄位、Redis value、訊息佇列 payload;③ 把 JSON 字串作為另一個 JSON 欄位的 value(「巢狀 JSON」,如稽核日誌、API 響應裡包了上一段呼叫的完整請求體);④ 把 JSON 字串塞進 URL 的 query 參數或 HTTP header 中跨服務傳遞。

這種「二次嵌入」場景下,原始 `JSON.stringify()` 輸出還不夠——字串內部的換行符、雙引號、反斜線必須再次跳脫,否則會破壞外層結構。GeekFormat 的 JSON Stringify 工具在標準序列化基礎上,自動做一次「字串嵌入跳脫」:把結果再用一對雙引號包裹,並對內部所有特殊字元("、\、\n、\r、\t、\b、\f)做反斜線跳脫,使輸出可以直接貼到任意程式碼或文字中而不破壞外層語法。配合 Parse 模式,又能將這種被跳脫過的字串完整還原為可讀的 JSON 物件。整個過程在瀏覽器本地完成,不上傳任何內容。

適用場景

  • 把 JSON 物件序列化為字串字面值,直接賦值給 JavaScript / Java / Python / Go 變數
  • 把 API 響應中的 JSON 巢狀到另一個 JSON 欄位裡(外層 JSON 內的字串 value)
  • 把 JSON 字串存進資料庫 TEXT 欄位、Redis value、訊息佇列 payload 等需要字串的儲存
  • 把 JSON 字串作為 URL query 參數或 path 的一部分跨服務傳遞
  • 在 Markdown、HTML、LaTeX 等文件中嵌入可讀 JSON 範例程式碼片段
  • 把日誌/設定檔中的 JSON 字串反向解析為物件結構便於人工審閱

使用方法

  1. 把 JSON 內容(物件 / 陣列 / 值)貼到左側輸入框,或點擊「範例」載入一個典型 JSON,或上傳 .json/.txt 檔案
  2. 選擇處理模式:預設 Stringify(物件 → 嵌入字串),如需反向解析可點擊「Parse」切換為字串 → 物件
  3. 在 Stringify 模式下根據需要切換 "Pretty"(2 空格縮排)或 "Compact"(單行)格式
  4. 右側輸出框會即時顯示結果,確認後點擊「複製」把字串貼到程式碼 / 文件中,或點擊「下載」儲存為 stringified.txt / parsed.json

功能特點

  • 雙向模式:支援 Stringify(JSON 物件 → 帶引號可嵌入字串)與 Parse(帶引號字串 → JSON 物件)雙向處理
  • 智慧嵌入跳脫:在標準 JSON.stringify 基礎上自動加引號包裹並跳脫 "、\、\n、\r、\t 等特殊字元,可直接貼到程式碼或文字中
  • 縮排格式可控:支援 0/2 空格縮排與單行緊湊模式,適配不同語言程式碼風格與體積最佳化需求
  • 程式碼嵌入直配:序列化結果可直接賦值給 JavaScript、Java、Python、Go 等主流語言變數,無需手工再跳脫
  • URL / 資料庫場景最佳化:輸出的字串可安全塞進 query 參數、HTTP Body、資料庫 TEXT 欄位、Markdown 文件
  • Parse 反向完整還原:能正確去掉外層引號並反轉義所有 \n、\t、\"、\\ 等序列,還原為標準 JSON 物件
  • 本地處理保護隱私:解析、跳脫、反跳脫、格式化全部在瀏覽器本地完成,輸入內容不發送到任何伺服器
  • 可載入檔案與範例:支援上傳 .json/.txt 檔案或一鍵載入範例,便於快速驗證跳脫效果

程式碼範例

使用 JavaScript JSON.stringify 嵌入到源碼

javascript
// 業務中需要把一段 JSON 作為字串字面值嵌入 JS 源碼
const data = { name: 'Alice', age: 30, tags: ['dev', 'writer'] };

// 標準序列化
const json = JSON.stringify(data, null, 2);

// 嵌入跳脫: 加外層引號 + 跳脫內部 " \ \n \r \t
const embedded = '"' + json
  .replace(/\\/g, '\\\\')
  .replace(/"/g, '\\"')
  .replace(/\n/g, '\\n')
  .replace(/\r/g, '\\r')
  .replace(/\t/g, '\\t') + '"';

// 反向解析
const restored = JSON.parse(embedded);
console.log(restored.name); // 'Alice'

使用 Python json.dumps + 反跳脫嵌入

python
import json

data = {"name": "Alice", "age": 30, "tags": ["dev", "writer"]}

# 序列化並縮排
pretty = json.dumps(data, indent=2, ensure_ascii=False)
print(pretty)

# 嵌入跳脫: 直接用 json.dumps 即可,它會做完整跳脫
embedded = json.dumps(pretty)  # 字串字面值值
print(embedded)  # '"{\\n  \\"name\\": \\"Alice\\",...\\n}"'

# 反向解析
restored = json.loads(json.loads(embedded))
print(restored["name"])  # Alice

使用 jq 在命令列把 JSON 嵌入為字串

bash
# 把 data.json 序列化為帶引號可嵌入的字串
jq -Rs . data.json

# 解釋: -R (raw input) + -s (slurp) 把整個檔案當字串,
#       再用 . 轉為 JSON 字串字面值, 內部 \" \\ \n 自動跳脫

# 反向: 把字串解析回 JSON
echo '"{\"name\":\"Alice\"}"' | jq -r .

常見問題

JSON Stringify 和 JSON.stringify() 是一回事嗎?

底層邏輯一致,都是把 JSON 物件序列化為字串。差別在於本工具在標準序列化基礎上還會把結果再用一對雙引號包裹,並對內部所有特殊字元做反斜線跳脫,使輸出可以直接貼到程式碼、URL、資料庫欄位中作為「字串字面值」使用,而不必再手工寫跳脫。

Stringify 和 JSON Escape 有什麼差別?

JSON Stringify 是把整個 JSON 物件轉為帶引號、可嵌入的字串;JSON Escape 是只對一段已有字串中的特殊字元加反斜線跳脫、不改物件結構。前者面向「物件 → 嵌入字串」,後者面向「字串 → 安全字串」。當你的輸入本身就是合法 JSON、需要嵌到程式碼裡時用 Stringify;輸入是普通文字片段時用 Escape。

Stringify 後會丟失 JSON 的可讀性嗎?

不會丟失資料。預設會保留 2 空格縮排和換行,結果仍是合法且易讀的 JSON 字串;如果你希望生成單行最短字串便於嵌入體積敏感場景,可切換到「Compact」模式。

Parse 模式能把帶 \n \t \" 的字串還原回去嗎?

可以。Parse 模式會自動識別輸入是否被外層引號包裹,按 JSON 規則反轉義 \n、\r、\t、\"、\\ 等所有常見跳脫序列,再解析為標準 JSON 物件。注意輸入必須是被合法跳脫過的字串,否則會報 SyntaxError。

Stringify 後的字串可以直接塞進 URL 嗎?

可以,但建議額外做一次 URL Encode。Stringify 處理的是 JSON 語法字元("、\、換行),而 URL 還會把 &、=、空格、中文當作保留字元,因此對 URL 參數應再做 encodeURIComponent 處理,本工具只負責 JSON 層級的安全。

巢狀 JSON(JSON 字串作為另一個 JSON 的 value)怎麼處理?

Stringify 模式會先把內層 JSON 正常序列化得到字串,再對這個字串做一次「嵌入跳脫」(最外層加引號、內部 "、\、\n 跳脫),最終得到的就是一個「外層 JSON 的合法字串欄位值」,可以直接貼到外層 JSON 中使用;Parse 模式則做相反的事。

工具會修改欄位順序或鍵名嗎?

不會。Stringify 嚴格按輸入物件目前的欄位順序輸出,鍵名也不做大小寫、空格或單複數改寫。如果需要統一鍵名順序,可先用 JSON Sort 工具預處理;如果鍵名含中文或特殊字元,本工具會按 JSON 規範輸出。

支援將結果直接儲存為檔案嗎?

支援。Stringify 模式下點擊「下載」會儲存為 stringified.txt(純字串),Parse 模式下會儲存為 parsed.json(標準 JSON 檔案)。也可一鍵複製到剪貼簿貼到程式碼或文件中。

輸入超過幾 MB 時會卡嗎?

本工具按 1-3 MB 內的輸入做過流暢度最佳化,更大的輸入(比如 10 MB+)也能處理但會受瀏覽器記憶體影響。建議:① 超大檔案先在本地 Node.js 腳本裡用 JSON.stringify 處理;② 拆成多個小批次使用本工具;③ 關閉瀏覽器其它分頁釋放記憶體。

Stringify 後的字串裡有中文/emoji 正常嗎?

正常。JSON 規範允許字串內直接出現非 ASCII Unicode 字元(包括中文、emoji),不會被自動跳脫為 \uXXXX。僅有 "、\ 和控制字元會被跳脫。如果你需要 \uXXXX 形式(例如為了相容老舊協議),可以在輸出後用程式碼再處理一次。

工具會上傳我的 JSON 到伺服器嗎?

不會。序列化、反序列化、跳脫、反跳脫、格式化全部在瀏覽器本地完成,輸入內容與中間結果都不會發送到任何伺服器。可離線使用,適合處理內部設定、API 響應、含敏感資訊的 JSON。

和 JSON 壓縮、JSON 格式化配合使用的最佳順序是什麼?

推薦鏈路:① JSON 修復(清洗非法 JSON)→ ② JSON 格式化(標準化縮排)→ ③ JSON Sort(統一鍵名順序,便於比對)→ ④ 本工具 Stringify(嵌入字串)→ ⑤ JSON Escape(對純文字片段做字元級跳脫)。按需選擇其中幾步即可。

故障排查

Stringify 提示 "Invalid JSON" 錯誤

原因:輸入不是合法 JSON,例如含尾隨逗號、單引號、未加引號鍵名、註解。解決方法:先用 GeekFormat 的「JSON 修復」工具清洗一次,再回到本工具做 Stringify;或在編輯器裡把非法字元手工刪除後再試。

Parse 後輸出不是合法 JSON

原因:輸入的字串沒有被外層引號正確包裹,或內部跳脫符被破壞(例如某些編輯器會自動去掉 \ 字元)。解決方法:檢查輸入是否以 " 或 ' 包裹;查看內部是否還存在未配對的 \ 字元;先用 JSON 修復工具還原再 Parse。

Stringify 後欄位順序變了

原因:極少數瀏覽器對純整數鍵(如 "0": ..., "1": ...)會自動按數字順序排序輸出。解決方法:把整數鍵改為字串鍵("k0", "k1")再處理;或先用 JSON 排序工具按你期望的鍵名順序整理後再 Stringify。

嵌入到 JS 程式碼裡報 SyntaxError

原因:手工拼接時漏寫了反斜線跳脫或外層引號用了單引號但內部含未跳脫單引號。解決方法:直接複製本工具 Stringify 模式的輸出,不要二次手工編輯;如果一定要改用單引號包裹,需把內部所有 ' 替換成 \'。

輸出裡出現 \uXXXX 而不是中文

原因:本工具預設輸出原字元(中文/emoji 直接顯示),如果你看到 \uXXXX 說明你的輸入本身就是被跳脫過的字串。解決方法:在 Parse 模式中先反跳脫一次,或在程式碼中改用 ensure_ascii=False(Python)/ 不做跳脫的序列化器。

大檔案(10 MB+)瀏覽器卡死或崩潰

原因:瀏覽器一次性 JSON.parse 大文字會佔用大量記憶體。解決方法:把輸入按 1-2 MB 切片分批處理;在本地用 Node.js(`JSON.stringify`)或 Python(`json.dumps`)腳本處理超大檔案;處理完再用本工具做小幅手動驗證。

術語表

JSON.stringify
JavaScript 內建方法,把 JS 值序列化為 JSON 字串;返回結果本身仍是合法 JSON,可被 JSON.parse 還原,但預設不含外層引號和額外跳脫。
JSON.parse
JavaScript 內建方法,把符合 RFC 8259 的 JSON 字串解析為 JS 值;遇到任何語法錯誤立即拋 SyntaxError。
Serialize / 序列化
把記憶體中的資料結構(物件/陣列)轉換為可儲存/可傳輸的文字格式(JSON 字串)的過程,JSON Stringify 是最常見的實作。
Deserialize / 反序列化
序列化的逆過程,把 JSON 字串重新還原為記憶體中的物件/陣列;對應 JSON.parse。
Escape / 跳脫
在特殊字元前加反斜線(" → \"、\ → \\、\n → \\n 等),使字串可以安全嵌入到外層程式碼或文字中而不破壞外層語法。
String Literal / 字串字面值
源碼中用一對引號包裹的字串常數;JSON Stringify 的最終輸出形式就是 JS/Java/Python 等語言的字串字面值。
Double-Escape / 雙重跳脫
字串本身已經被跳脫過一次,嵌入到另一層字串時再次被跳脫;如 `\n` 雙重跳脫後變成 `\\n`,常見於日誌和資料庫儲存時手工拼接造成的 bug。
Unicode 跳脫 (\uXXXX)
JSON 規範允許用 `\uXXXX` 表示任意 Unicode 字元;JS 標準函式庫預設不會自動把中文/emoji 轉成 `\uXXXX`(除非明確指定 ensure_ascii=True)。
ensure_ascii (Python)
Python json.dumps 模組的參數;設為 True(預設)會把所有非 ASCII 字元轉成 `\uXXXX`,設為 False 則保留原字元。
URL Encode
把 URL 保留字元(&、=、空格、中文等)轉成 `%XX` 形式;JSON Stringify 只處理 JSON 語法字元,URL 參數還需額外做 encodeURIComponent。

JSON Stringify 字元跳脫對照表

原始字元Stringify 後名稱說明
"\"雙引號JSON 字串必須跳脫,否則閉合外層引號
\\\反斜線跳脫字元本身需要雙重表示
換行 LF\nNewline多行字串壓縮為單行必須跳脫
回車 CR\rCarriage ReturnWindows 換行符 CRLF 中的 CR
Tab\tTab縮排 Tab 跳脫
退格\bBackspace控制字元跳脫
換頁\fForm Feed控制字元跳脫
//斜線JSON 標準允許但不強制跳脫

JSON.stringify vs JSON Stringify 嵌入工具 vs JSON Escape

工具輸入輸出典型場景
JSON.stringify()JS 物件合法 JSON 字串API 響應、檔案落盤、跨服務傳 JSON
本工具 Stringify 模式JSON 物件帶外層引號 + 內部跳脫的可嵌入字串嵌入到程式碼、URL、資料庫字串欄位
本工具 Parse 模式被 Stringify 過的字串標準 JSON 物件把日誌/資料庫裡的字串還原為物件
JSON Escape 工具普通字串只跳脫特殊字元的字串對 SQL/HTML/Shell 裡的特殊字元跳脫
JSON.stringify(value, replacer, space)JS 物件 + 可選過濾/縮排帶縮排/過濾的 JSON 字串開發除錯日誌、生成可讀 JSON 檔案

Authoritative References