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 的使用方法
- 貼上 YAML 將要轉換的 YAML 貼到左側輸入框。如果手邊沒有現成資料,可以點擊「載入示例」先試用範例內容。
- 查看轉換結果 輸入或貼上後右側會立即顯示 JSON。如果語法有問題,會在原位顯示說明可能原因的錯誤訊息。
- 切換格式化顯示 開啟「格式化顯示」可得到帶縮排、易讀的結果;關閉則會壓縮成不含換行的單行 JSON,可依貼上目的自行切換。
- 複製或下載結果 使用複製按鈕可直接送入剪貼簿,使用下載按鈕可將結果儲存為獨立的 .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陣列。
常見問題
<<: *name)也會展開。多文件串流和|、>區塊標量同樣支援。
閒話 ― 為什麼配置檔案用 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。