YAML 轉 JSON
將 YAML 資料轉換為 JSON。可在瀏覽器中即時把 Kubernetes 清單、docker-compose.yml、CI 配置檔案等 YAML 結構,轉換成 jq 等僅支援 JSON 的工具可以處理的格式。
什麼是 YAML 轉 JSON
YAML 轉 JSON 是把 Kubernetes 清單、docker-compose.yml、GitHub Actions 工作流等以易讀的 YAML 格式撰寫的設定,在瀏覽器中即時轉換成程式更容易機械化處理的 JSON 格式。本工具支援對映(`key: value`)、區塊序列(`- item`)、流式序列(`[a, b, c]`)、流式對映(`{a: 1, b: 2}`),以及字串、整數、小數、布林值、null 等基本標量,還有 `#` 註解。只要 YAML 寫法屬於日常設定中常見的形式,貼上後即可立即得到可用的 JSON。
不過本工具並未實作完整的 YAML 1.2 規範。用於值複用的錨點(`&`)與別名(`*`)、第二個及之後的 `---` 構成的多文件流、用於多行字串的 `|`、`>` 區塊標量,以及 `- - item` 這類同行巢狀序列均不受支援。如果輸入依賴這些高階特性,轉換會失敗並顯示錯誤,建議先把相關部分改寫成更簡單的等價形式再貼上。所有處理都在瀏覽器本機完成,貼上的內容不會傳送到任何外部伺服器,這對包含金鑰或內部基礎設施資訊的 YAML 尤其重要。
YAML 轉 JSON 的使用方法
- 貼上 YAML 將要轉換的 YAML 貼到左側輸入框。如果手邊沒有現成資料,可以點擊「載入示例」先試用範例內容。
- 查看轉換結果 輸入或貼上後右側會立即顯示 JSON。如果語法有問題,會在原位顯示說明可能原因的錯誤訊息。
- 切換格式化顯示 開啟「格式化顯示」可得到帶縮排、易讀的結果;關閉則會壓縮成不含換行的單行 JSON,可依貼上目的自行切換。
- 複製或下載結果 使用複製按鈕可直接送入剪貼簿,使用下載按鈕可將結果儲存為獨立的 .json 檔案以便日後使用。
用好本工具的小技巧
- 直接貼上 Kubernetes 清單或 docker-compose.yml,即可將其結構視覺化為 JSON,方便 jq 等僅支援 JSON 的命令列工具進行查詢。
- 以零開頭的郵政編碼、電話號碼等值如果不加引號,會被解析為數字並丟失開頭的零,需要保留為字串的值請務必加上引號。
- 本工具不支援使用錨點(`&`)、別名(`*`)或 `|`、`>` 塊狀標量等高階寫法的複雜 YAML,請先改寫為簡單形式再貼上。
- 取消勾選"格式化顯示"即可得到不含換行的單行 JSON,適合貼上到不希望包含換行符的 API 請求體中。
YAML 轉 JSON 的應用場景
用 jq 查詢 Kubernetes 清單
清單檔案動輒數百行,轉換成 JSON 後交給 jq,用類似 `.spec.containers[].image` 的路徑即可瞬間取出所需的值。
讓指令碼讀取 docker-compose.yml
如果自行撰寫的指令碼或自動化工具沒有內建 YAML 解析函式庫,先轉換成 JSON 後,僅用標準的 JSON 解析器就能處理設定內容。
視覺化 CI 設定檔的結構
貼上 GitHub Actions 或 GitLab CI 的工作流檔案,以 JSON 形式查看結構,能更清楚掌握僅靠縮排容易忽略的巢狀關係。
為使用只接受 YAML 的工具或 API 做準備
即使手邊的資料來源是 JSON,也可以先轉換一份現有的 YAML 檔案,事先確認其結構組織方式。
銜接其他 JSON 工具繼續處理
轉換後的 JSON 可以直接貼到JSON 轉 TypeScript 型別定義或JSON 格式化工具中繼續加工。
YAML 相關術語表
- YAML
- 「YAML Ain't Markup Language」的遞迴縮寫。它透過縮排而非括號來表示層級結構,並且允許註解、引號大多可省略,因此成為人工直接編輯的設定檔常用格式。
- 對映(Mapping)
- 以 `key: value` 形式排列鍵值對的 YAML 結構,對應 JSON 中的物件。相同縮排層級的行會被視為同一層級的鍵。
- 區塊序列
- 由若干以連字號加空格開頭的行組成的 YAML 陣列表示法,例如 `- item`,對應 JSON 的陣列。本工具會把同一縮排下連續出現的 `-` 行讀作一個陣列。
- 流式寫法
- 不使用基於縮排的區塊格式,而是在一行內寫出序列或對映的方式,例如 `[a, b, c]` 或 `{a: 1, b: 2}`,外觀更接近 JSON 的陣列和物件。
- 錨點與別名
- 用 `&name` 為某個值命名,再用 `*name` 在別處引用該值的 YAML 特性,可以避免重複撰寫相同設定。本工具不支援該特性。
- 區塊標量
- 以 `|`(保留換行)或 `>`(把換行摺疊為空格)開頭,用於撰寫多行字串的寫法,常用於內嵌 Shell 指令碼或長說明文字,本工具不支援。
- 文件流
- 在一個 YAML 檔案中用 `---` 分隔多個文件的機制,常用於 Kubernetes 把多個資源合併到一個檔案中,而本工具一次只轉換一個文件。
常見問題
閒話 ― 為什麼配置檔案用 YAML 寫,工具卻要 JSON
YAML 因為可以寫註釋、引號也大多可以省略,可讀性很高,因此被廣泛用作 Kubernetes、docker-compose、GitHub Actions 工作流、Ansible playbook 等需要人工直接編輯的配置檔案格式。相比之下,JSON 的規範簡單明確,幾乎沒有歧義,程式處理起來更加機械化,因此成為了 API 資料交換以及 jq 等命令列工具的標準輸入格式。
YAML 轉 JSON 正是為了彌合"人寫 YAML、工具要 JSON"這一差距而存在的。尤其是 Kubernetes 的清單檔案常常長達數百行,僅靠 `grep` 查詢特定值很快就會遇到瓶頸。先轉換成 JSON 後再用 jq 查詢,就能用類似 `.spec.containers[].image` 的路徑瞬間取出所需的值。
不過完整的 YAML 規範(YAML 1.2)範圍非常廣,包含通過錨點、別名實現值複用、多文件流、用於多行字串的塊狀標量等許多高階功能。本工具刻意不覆蓋這些全部規範,而是聚焦於實際工作中最常出現的對映、序列與基本標量這一"常用子集",從而實現了無需外部依賴的簡潔實現。