什麼是 YAML?
YAML 是用縮排代替大括號的設定檔格式,Docker Compose、Kubernetes、GitHub Actions 與 Spring Boot 的 application.yml 都使用它。YAML 1.2 是 JSON 的超集合,兩者可以完整互轉,差別主要在易讀程度。
使用方式
- 選擇方向:JSON → YAML 或 YAML → JSON。
- 貼上內容。開啟自動轉換時,輸入就會即時轉換;語法錯誤會標出確切的行與欄。
- 選擇 2 或 4 個空白的縮排,再複製或下載結果。按「結果放回輸入」可以反向轉回去。
範例
這段 JSON:
{"name":"web","replicas":3,"ports":[80,443],"env":{"DEBUG":"yes","VERSION":"1.10"}}
會轉成:
name: web replicas: 3 ports: - 80 - 443 env: DEBUG: "yes" VERSION: "1.10"
注意 "yes" 與 "1.10" 加了引號。不加的話,很多 YAML 工具會把 yes 讀成布林值 true、把 1.10 讀成數字 1.1,設定就在不知不覺中被改掉了。
常見問題
為什麼有些值加了引號?
YAML 可能誤判的字串一律加引號:yes、no、on、null 這類字,看起來像數字或日期的文字,以及含有 : 或 # 的文字。有名的例子是挪威的國碼 NO,舊版的 YAML 解析器會把它變成 false。
大數字會保持精確嗎?
會,雙向都會。9007199254740993 或 1280.50 這樣的值會照原文寫出。很多線上轉換工具會讓數字經過 JavaScript,把很大的 ID 四捨五入成 9007199254740992。
註解、錨點和多份文件會怎麼處理?
JSON 沒有註解,所以 YAML 的註解會被拿掉。錨點與別名(&base、*base)以及合併 key(<<: *base)會展開成實際的值。以 --- 分隔的多份文件會轉成 JSON 陣列。
日期會怎麼處理?
2024-01-01 這類日期在 JSON 中保持原本的文字,不會換成其他格式或時區。