JSON 與 YAML 互轉工具

在 JSON 與 YAML 之間互轉,保留鍵的順序

JSON 與 YAML 雙向轉換,保留鍵的順序自動辨識
JSON 輸入
YAML 輸出

工具說明

關於 JSON 與 YAML 互轉工具

這個轉換工具能把 JSON 換成 YAML,也能把 YAML 換回 JSON,讓同一份設定在 API 承載內容、Kubernetes 資源檔、Docker Compose 檔、GitHub Actions 工作流程或 OpenAPI 文件之間流通,不必重新打字。

轉換會隨著你輸入即時進行,鍵的順序完全依照你寫的樣子保留,縮排可設定為 2 或 4 個空格。語法錯誤會回報確切的行號與欄號。

如何在 JSON 與 YAML 之間轉換

  1. 把你的 JSON 貼進輸入面板,YAML 結果會立刻出現,不需要按任何按鈕。
  2. 用方向按鈕切換成 YAML to JSON,例如把資源檔餵給只讀得懂 JSON 的程式。
  3. 選擇 2 或 4 個空格的縮排,以符合你的儲存庫風格。Kubernetes 與 GitHub Actions 的檔案通常用 2。
  4. 如果輸入不合法,就照回報的行號與欄號去修正那個位置,輸出會自動重新整理。

什麼時候會用到

  • 把 kubectl 匯出的 JSON 資源,變成一份可讀、可提交進版控的 YAML 資源檔。
  • 在測試自動產生的設定時,轉換一段 Docker Compose 的服務區塊。
  • 在 JSON 與 YAML 兩種形式之間搬動 OpenAPI 規格,因為兩邊的工具各有偏好。
  • 把以 JSON 產生的 GitHub Actions 工作流程片段,改寫成執行器所預期的 YAML。

會讓轉換出錯的 YAML 規則

YAML 1.2 幾乎是 JSON 的超集合,所以合法的 JSON 通常也是合法的 YAML。問題出在反方向:YAML 會去猜型別,而 JSON 從來不猜。

  • 挪威問題:NO、no、yes、on、off 會被 YAML 1.1 剖析器讀成布林值,於是國碼 NO 變成 false。這類值請加引號。
  • 開頭的零:像 010 這樣的值可能被讀成八進位數字,而不是字串。識別碼、郵遞區號與料號請加引號。
  • 版本號:未加引號的 1.10 會變成浮點數 1.1,結尾的零就此消失。
  • 縮排一定要用空格、絕不能用 Tab,而且每個引出值的冒號後面都要有一個空格。

JSON 轉 YAML常見問題

轉換工具會重排我的鍵嗎?
不會。鍵會依照你提供的順序輸出,這能讓版本控制中的差異保持精簡。
我的註解會怎樣?
JSON 沒有註解語法,所以 JSON 轉 YAML 無法憑空生出註解,而 YAML 轉 JSON 則會捨棄原始檔裡的註解。如果註解很重要,請保留原檔。
輸出會包含錨點與別名嗎?
不會。重複的結構會完整寫出來,因此任何剖析器不必支援別名也讀得懂結果。
我的設定檔會被上傳到哪裡嗎?
不會。剖析與轉換都在你的瀏覽器裡用 js-yaml 完成,你貼上的內容不會離開你的電腦,wetool.site 也不會保存。
為什麼某個 YAML 值轉換後型別變了?
YAML 會替未加引號的純量猜型別。在 YAML 原始碼裡替該值加上引號,它就會轉成 JSON 字串。

JSON 與 YAML 的比較

JSON 嚴謹且無歧義,很適合當傳輸格式,但它沒有註解,而且巢狀一深就顯得雜亂。YAML 在審查時比較好讀,代價是型別猜測與對縮排的敏感。多數團隊把設定放在 YAML,只在邊界處交換 JSON,而這正是雙向轉換存在的意義。

提交前的加引號檢查清單

多數由轉換引起的部署失敗,都來自某個值弄丟了型別。請針對以下情況掃過 YAML 輸出。

  • 國家與語言代碼,尤其是 NO,以及任何看起來像單字的兩字母值。
  • 其實是識別碼的數字:帳號、補零的通訊埠,以及任何開頭有零的內容。
  • 版本號與映像檔標籤,例如 1.10 或 3.20,被當成浮點數時會掉掉結尾的零。