JSON ↔ YAML 轉換

在瀏覽器把 JSON 轉成 YAML,或把 YAML 轉成 JSON。大數字不失真,yes、1.0 這類容易誤判的值會加上引號,支援錨點、合併 key 與多份文件。

什麼是 YAML?

YAML 是用縮排代替大括號的設定檔格式,Docker Compose、Kubernetes、GitHub Actions 與 Spring Boot 的 application.yml 都使用它。YAML 1.2 是 JSON 的超集合,兩者可以完整互轉,差別主要在易讀程度。

使用方式

  1. 選擇方向:JSON → YAML 或 YAML → JSON。
  2. 貼上內容。開啟自動轉換時,輸入就會即時轉換;語法錯誤會標出確切的行與欄。
  3. 選擇 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 中保持原本的文字,不會換成其他格式或時區。