JSON 轉 Env 工具
把 JSON 物件轉換成 .env 的 KEY=VALUE 格式,支援巢狀物件展平與註解回填,純瀏覽器端運算。
貼上 JSON 物件,就能產生 dotenv 這類載入器在程式啟動時讀取的 .env 環境變數。巢狀物件會串成 db.host 這種帶點號的變數名稱,陣列寫成單行 JSON 文字,true、false 與數字則以純文字寫出;Env 轉 JSON 產生的 $comments 對照表,會還原成每個變數上方的 # 註解。整個轉換在瀏覽器內完成,JSON 裡的金鑰不會離開你的裝置。
關於 JSON 轉 Env 工具
環境變數只能存放單層的字串,所以把 JSON 轉成 .env,重點其實是每個變數該怎麼命名。開啟展平時,巢狀路徑的每一層都會用分隔符號接起來:{ "app": { "cache": { "ttl": 60 } } } 會變成 app.cache.ttl=60,而且鍵名大小寫完全照 JSON 原樣保留,不會自動轉成大寫。要特別注意,shell 沒辦法使用名稱裡帶點號的變數;如果這個設定檔會被 shell 腳本 source,請把分隔符號改成底線,得到 app_cache_ttl。關閉展平的話,巢狀物件就不再拆開,整個以單行 JSON 文字寫在等號後面。
你可能還需要
如何把 JSON 轉換成 .env
- 1
貼上 JSON 物件
輸入欄只接受物件,陣列或單一值都不行;也可以按燒瓶圖示,載入一份只有 API 金鑰和連接埠的單層範例。
- 2
決定變數命名方式
在進階選項中,保留點號會得到 db.host 這類 dotenv 風格的名稱;改用底線會得到 shell 也能用的 db_host;也可以關閉展平,讓巢狀物件維持 JSON 文字。
- 3
產出 NAME=value
按下「轉換」,每個末端值各自成為一行,順序和 JSON 原本的鍵順序相同;$comments 的項目會以 # 行出現在它所說明的變數正上方。含有換行、前後空白或 # 的值會加上引號(換行寫成 \n),轉回 JSON 時能原樣讀出。
- 4
存檔並妥善保管
複製文字或下載成 .env 檔;內含帳密等憑證時,記得不要加進版本控制。要轉回 JSON,按切換方向圖示即可。
參考資料
- The Twelve-Factor App — Config
把組態存成環境變數這套方法論,也是本工具輸出格式所遵循的規範。
- dotenv (motdotla) — README
.env 檔案語法的參考實作,說明了 KEY=VALUE 鍵值對和註解的慣用寫法。
- RFC 8259 — The JSON Data Interchange Format
本工具解析的 JSON 輸入格式所依據的 IETF 規範。
相關開發者工具
JSON 轉 Env 常見問題
- 變數名稱會被改成全大寫嗎?
- 不會。鍵名一律沿用 JSON 裡的大小寫,{ "db": { "host": "x" } } 產生的是 db.host=x。Linux 與 macOS 的環境變數名稱有區分大小寫,所以 JSON 的鍵請直接寫成應用程式讀取時用的大小寫。
- 產生的 .env 可以直接被 shell 腳本 source 嗎?
- 要每個名稱都是合法的 shell 識別字才行:只能有英文字母、數字和底線,而且不能以數字開頭。像 db.host 這種帶點號的名稱,用 Node.js 的 dotenv 載入沒問題,但 shell 不會把它當成指派敘述。預計要 source 的檔案,請改用底線當分隔符號。
- 陣列會被拆成好幾個變數嗎?
- 不會。展平開啟時,巢狀物件會拆成多個點號變數,陣列則整個寫成單行 JSON 文字,例如 tags=["a","b"]。展平關閉時,巢狀物件同樣以 JSON 文字原封不動保留。
- 輸出的變數順序會被打亂嗎?
- 不會。每個末端值都依照它在 JSON 裡原本的順序,逐一寫成一行 NAME=value,產生的 .env 和原始 JSON 可以直接對照閱讀。
- true 或 8080 寫進 .env 之後還有型別嗎?
- 沒有。.env 檔案本身沒有型別概念,true、false 和數字都以純文字寫出。之後用 Env 轉 JSON 讀回來時,只要開啟型別推斷,就會重新變成真正的布林值與數字。
- 原本的 # 註解能還原嗎?
- 可以。JSON 裡若有 $comments 物件(例如 Env 轉 JSON 的輸出結果),每一筆都會變成對應變數上方的 # 行。只想要乾淨的 NAME=value,就到進階選項把「註解處理」設為「忽略」。
- 含有 API 金鑰的 JSON 會被上傳嗎?
- 不會。轉換是在你的瀏覽器本機進行。.env 檔案通常放著 API 金鑰和資料庫密碼,所以這點特別重要。
- 為什麼會出現變數名稱無效的提示?
- 變數名稱為空,或含有空白、=、:、#、引號、反斜線時,寫進 .env 後就無法原樣讀回,所以轉換會停下來並指出是哪個鍵,而不是寫出一行壞掉的資料。請在 JSON 裡改掉這個鍵名;如果是分隔符號帶進了這個字元,就換一個分隔符號。