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 的使用方法

  1. 貼上 YAML 將要轉換的 YAML 貼到左側輸入框。如果手邊沒有現成資料,可以點擊「載入示例」先試用範例內容。
  2. 查看轉換結果 輸入或貼上後右側會立即顯示 JSON。如果語法有問題,會在原位顯示說明可能原因的錯誤訊息。
  3. 切換格式化顯示 開啟「格式化顯示」可得到帶縮排、易讀的結果;關閉則會壓縮成不含換行的單行 JSON,可依貼上目的自行切換。
  4. 複製或下載結果 使用複製按鈕可直接送入剪貼簿,使用下載按鈕可將結果儲存為獨立的 .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 把多個資源合併到一個檔案中,而本工具一次只轉換一個文件。

常見問題

當你想用 jq 等僅支援 JSON 的命令列工具查詢或處理 Kubernetes 清單、CI 配置檔案時,或者某個 API、指令碼只接受 JSON 而無法直接讀取 YAML 時,先轉換成 JSON 會很方便。

不支援。本工具是僅覆蓋常用寫法(對映、序列、基本標量)的輕量解析器,因此用於值複用的錨點、別名,以及多文件流、`|`/`>` 塊狀標量等功能均不在支援範圍內。

最常見的原因是縮排不一致,例如同一層級的專案空格數量不統一,或使用了製表符(Tab)而非空格進行縮排。此外,`key: value` 中冒號後面缺少空格也會導致解析失敗。

本工具目前僅支援 YAML 轉 JSON 這一方向。如果需要單獨格式化或校驗 JSON、YAML,請使用本站的其他格式化工具。
工具君

閒話 ― 為什麼配置檔案用 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)範圍非常廣,包含通過錨點、別名實現值複用、多文件流、用於多行字串的塊狀標量等許多高階功能。本工具刻意不覆蓋這些全部規範,而是聚焦於實際工作中最常出現的對映、序列與基本標量這一"常用子集",從而實現了無需外部依賴的簡潔實現。