跳到主要內容

資料交換:YAML To JSON

使用 yaml 庫(YAML 1.2 core schema)解析一個 YAML 文件,並輸出為縮排的 JSON。註釋會被丟棄,錨點和別名會被展開,yes 或 2024-01-01 這樣的值保持為字串。

把用 YAML 寫的設定傳送給只接受 JSON 的 API 或 JSON Schema 校驗器。

YAML

適用場景

  • 把用 YAML 寫的設定傳送給只接受 JSON 的 API 或 JSON Schema 校驗器。
  • 確認 CI 或 Kubernetes 檔案中值的實際型別,例如版本號是字串還是數字。

使用方法

  1. 貼上單個 YAML 文件,或載入 .yaml/.yml 檔案。
  2. 如果出現錯誤,在報告的行檢查縮排、重複的鍵和 --- 分隔符。
  3. 檢查 JSON 輸出中的字串與數字,然後複製。

YAML 輸入

# deployment settings
service: billing-api
replicas: 2
version: "1.10"
enabled: yes
ports:
  - 80
  - 443
env:
  LOG_LEVEL: info

JSON

{
  "service": "billing-api",
  "replicas": 2,
  "version": "1.10",
  "enabled": "yes",
  "ports": [
    80,
    443
  ],
  "env": {
    "LOG_LEVEL": "info"
  }
}

功能與限制

解析在瀏覽器中進行。輸出始終是 2 空格縮排的 JSON;沒有壓縮選項。

遵循 YAML 1.2 規則:yes/no/on/off 是字串而不是布林值,不帶引號的日期保持為字串。0o17 是八進位制(15)。

合併鍵(<<: *anchor)不會被合併,而是作為字面量鍵 "<<" 出現。同一對映中的重複鍵會報錯。

超過 2^53 的整數在 JSON 中會丟失精度。請在 YAML 中給長 ID 加引號。

FAQ

能轉換用 --- 分隔的多文件檔案嗎?

不能。多個文件會導致錯誤 "Source contains multiple documents"。請一次貼上一個文件。開頭單獨一個 --- 沒有問題。

為什麼 enabled: yes 在 JSON 中是字串?

解析器遵循 YAML 1.2,只有 true 和 false 是布林值。如需 JSON 布林值,請寫 true/false。

支援錨點和別名嗎?

支援。像 *base 這樣的別名會被替換為錨點值的副本。但 YAML 1.1 的合併鍵 << 不會生效。

規範與參考資料