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的解析使用遵循YAML 1.2規範的開源解析器(yaml)。重複使用值的錨點(&)和別名(*)會展開為被參照的值,表示多行字串的|、>區塊標量也會依照規範進行轉換。用---分隔的多文件會輸出為依文件排列各自值的JSON陣列(因為合併成一個物件會導致相同的鍵被覆蓋)。同一層級出現重複鍵或存在語法錯誤時,會顯示附有行號的錯誤。所有處理都在瀏覽器內完成,輸入內容不會傳送到外部伺服器。

YAML 轉 JSON 的使用方法

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

用好本工具的小技巧

  • 直接貼上 Kubernetes 清單或 docker-compose.yml,即可將其結構視覺化為 JSON,方便 jq 等僅支援 JSON 的命令列工具進行查詢。
  • 以零開頭的郵政編碼、電話號碼等值如果不加引號,會被解析為數字並丟失開頭的零,需要保留為字串的值請務必加上引號。
  • 像Kubernetes那樣用---把多個資源放在一個檔案中的YAML,會轉換為依文件排列各自值的JSON陣列。在jq中請以陣列處理,例如.[0]或.[] | .kind。
  • 取消勾選"格式化顯示"即可得到不含換行的單行 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功能,可以重複使用相同的設定。本工具會在別名的位置展開被參照的值後轉換為JSON。
區塊標量
以|(保留換行)或>(將換行摺疊為空格)開頭、跨越多行的字串寫法。常用於嵌入Shell指令碼或較長的說明文字,本工具會將其轉換為以\n表示換行的JSON字串。
文件流
在一個YAML檔案中用---分隔包含多個文件的機制。常用於把多個Kubernetes資源放在同一個檔案中,本工具會將其輸出為依文件排列各自值的JSON陣列。

常見問題

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

可以。本工具使用遵循YAML 1.2規範的解析器,會在別名的位置展開被參照的值並輸出為JSON。Docker Compose等檔案中使用的合併鍵(<<: *name)也會展開。多文件串流和|、>區塊標量同樣支援。

最常見的原因是縮排錯亂。使用定位字元(Tab)縮排,或同一層級的項目空格數不一致時都無法解析。同一層級中出現兩次相同的鍵也違反YAML規範,會報錯。錯誤訊息中會顯示發現問題的行號,請檢查該行及其上一行。

本工具目前僅支援 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)非常龐大,包含透過錨點和別名重複使用值、多文件串流、表示多行字串的區塊標量等眾多進階功能。自行撰寫簡易解析器很容易在這些功能和跳脫的細節上弄錯值,因此本工具使用遵循規範的開源解析器進行解析,並依照規範輸出JSON。