§

貼上你想轉換的 JSON 或 YAML。

模式
縮排
選項
§

輸出

yaml

在台灣的雲原生現場,JSON 與 YAML 互轉幾乎是每日例行:中華電信 hicloud 與 KubeCon Taiwan 社群分享的部署清單多以 YAML 撰寫,但 kubectl 與 Helm 內部仍以 JSON 形式消費;玉山銀行、台新銀行的 Kubernetes 採用案例,以及廣達電腦的容器化製造平台,都需要把 YAML 清單轉為 JSON 餵給 Ajv、Joi 或 OPA Rego 做政策驗證。工研院(ITRI)資通所的雲端研究、趨勢科技(Trend Micro)的容器安全方案也大量依賴 YAML 與 JSON Schema 配對校驗。經濟部(MOEA)數位轉型專案下發的 OpenAPI 規格同樣在 YAML 與 JSON 之間頻繁互轉。本工具完全於瀏覽器中執行,敏感的叢集憑證與機敏設定絕不離開你的裝置。

什麼是 JSON ↔ YAML 轉換?

JSON(JavaScript Object Notation,RFC 8259)是一種嚴謹、以大括號為界的結構化資料文字格式;YAML(YAML Ain't Markup Language,1.2 版)是 JSON 的超集,採用縮排、換行與更易讀的語法來表達同一套值模型。兩者互轉可讓同一份設定在機器友善(JSON 用於 API、Schema 驗證、程式化轉換)與人類友善(YAML 用於程式碼審查、Kubernetes 清單、GitHub Actions 工作流)之間自由切換,而無需重新輸入任何一個鍵。

JSON ↔ YAML 轉換是如何運作的?

每一次轉換都在你的瀏覽器中使用內建的 js-yaml 函式庫(MIT,4.1.0 版)本機執行。主要步驟如下:

  1. 模式選擇器(自動偵測 / JSON → YAML / YAML → JSON)決定執行哪條管線。在自動偵測模式下,由輸入中第一個非空白字元決定方向 — {[ 表示 JSON;其它則視為 YAML。
  2. JSON → YAML:JSON.parse 驗證輸入並產生一個 JavaScript 值;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false }) 寫出 YAML 1.2 形式。開啟多文件時,輸入陣列的每個元素會被輸出為獨立文件,並以 --- 分隔符串接。
  3. YAML → JSON:jsyaml.loadAll 解析輸入中的每個文件(自動處理 --- 分隔符)並放入陣列;單一文件輸入會被解包,使 JSON 輸出直接是該文件本身,而非只含一個元素的陣列。
  4. 縮排(2 或 4 空格)以及美化輸出皆可設定。關閉美化輸出時,會透過 JSON.stringify(value) 輸出無空白的最小化 JSON。
  5. 結果寫入唯讀文字框。YAML 解析失敗時,錯誤訊息會包含 js-yamle.mark 中回報的 1-基準行欄號,讓你可以直接跳到出錯位置。

為什麼用此工具轉換 JSON 與 YAML?

  • 隱私:每一次解析、轉換與輸出都在你的瀏覽器中完成。資料 — 包括 Kubernetes Secret、簽署過的 JWT、專屬設定 — 永遠不會傳到我們的伺服器。
  • 多文件 YAML:jsyaml.loadAll 能辨識 --- 分隔符並回傳文件陣列,轉換器於單文件情境下解包,於多文件情境下保留為 JSON 陣列。
  • 錨點與別名可解析:YAML 的 &anchor / *alias 機制由 js-yaml 預設 schema 處理。定義一次、引用兩次的值會往返為一個 JSON 物件,其中所有引用持有相等的值。
  • 無 CDN、無遙測:js-yaml.min.js 與頁面同源載入,所以本工具可在離線、企業代理伺服器與氣隙網路環境中正常運作。

JSON ↔ YAML 轉換的常見應用情境有哪些?

在 DevOps、平台工程與 API 工具鏈中,JSON 與 YAML 互轉隨處可見:

  • Kubernetes 清單:把 YAML 形式的 DeploymentConfigMapHelmRelease 轉成 JSON,讓內部政策驗證器(Joi、Ajv、OPA Rego)以程式化方式 lint,再轉回 YAML 套用到叢集。
  • CI/CD 工作流:把 GitHub Actions 的 workflow.yml 往返通過 JSON,讓程式碼產生器重寫 matrix 或 job 依賴關係,再把整理過的 YAML 推到 PR。
  • OpenAPI 規格:把後端自動產生文件匯出的 JSON openapi.json 轉成 openapi.yaml,作為人工維護的參考檢入版本庫。

JSON ↔ YAML 的往返轉換範例長什麼樣?

貼上 {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}},在 JSON → YAML 模式按下轉換,會得到 8 列縮排 YAML,第一列為 apiVersion: apps/v1。把該 YAML 在 YAML → JSON 模式開啟美化輸出後餵回,JSON.stringify(value, null, 2) 後會逐位元組還原原物件,鍵順序也會保留 — 因為 js-yaml 的預設 schema 於兩個方向都遵循插入順序。

這個 JSON ↔ YAML 轉換器完全在我的瀏覽器中執行嗎?

是的。每次解析、轉換與輸出都會在你的瀏覽器分頁中以 JavaScript 在本機執行。內建的 js-yaml 函式庫與頁面同源載入 — 不使用 CDN、不呼叫 fetch、不呼叫 XMLHttpRequest,也不會用 navigator.sendBeacon 上報輸入。頁面一旦載入完成即可離線使用,因為它就是把第三方函式庫一併打包的靜態 HTML/CSS/JS 套件。Kubernetes Secret、JWT 載荷、簽署過的 CloudFormation YAML 與專屬設定都不會離開你的裝置。

轉換器如何處理多文件 YAML?

YAML 支援在同一串流中以僅含 --- 的列來分隔多份文件。在 YAML → JSON 方向,轉換器會呼叫 jsyaml.loadAll,把每份文件作為 JavaScript 值回傳。若只發現一份文件,JSON 輸出就是該文件本身;若發現兩份以上,JSON 輸出則為陣列。在 JSON → YAML 方向,當輸入是 JSON 陣列且多文件開關開啟時,每個陣列元素會作為獨立文件輸出,並在它們之間加入 --- 分隔符 — 對於從 JSON 資源陣列產生 kubectl apply 友善的 YAML 包很有幫助。

支援 YAML 的錨點與別名嗎?

支援 — &anchor 定義與 *alias 引用都會在載入步驟由 js-yaml 的預設 schema 解析。形如 defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d 的 YAML 會解析為一個 JSON 物件,其中 job_ajob_b 都包含 retries: 3, timeout: 30。合併鍵 <<(一個 YAML 1.1 擴充,js-yaml 仍然支援)在預設 schema 上同樣可用。

YAML 註解在 JSON 與 YAML 之間往返時會保留嗎?

不會 — js-yaml 會在解析步驟把註解剝離,因此 YAML → JSON → YAML 的往返會遺失每一行以 # 開頭的註解。這是 load/dump 模型的已知限制;若保留註解很關鍵,請使用具備註解感知的函式庫(如 yaml npm 套件,提供為保留 trivia 而設計的 CST + AST API),而非 js-yaml。對大多數設定轉換流程而言,這是可接受的取捨:往返後的 YAML 仍會保留所有鍵、值、錨點與別名,只是不帶人工撰寫的註解。

自訂 YAML 標籤會怎麼處理?

轉換器使用 js-yamlDEFAULT_SCHEMA,可辨識 !!str!!int!!float!!bool!!null!!seq!!map!!binary!!timestamp — 即 YAML 1.2 core 與 JSON schema 中的全部標籤。自訂或特定應用的標籤(例如 CloudFormation 的 !Ref、Ansible 的 !vault)不會被識別,並以清楚的錯誤訊息指出不支援的標籤。針對 CloudFormation,請先以 aws cloudformation package + --output-template-file 展開自訂標籤後再貼入本轉換器。

本 JSON ↔ YAML 轉換器內建 js-yaml@4.1.0 並與頁面同源載入,原生支援多文件串流與錨點/別名,並以行欄號回報 YAML 解析錯誤,方便你直接修正原檔。無上傳、無 CDN、無遙測 — 每一個位元組都留在你的瀏覽器中。