JSON 轉 YAML

免費線上JSON轉YAML轉換器,一鍵將JSON轉為標準YAML 1.2設定,支援自訂縮排、智慧修復JSON語法錯誤,可產生Kubernetes資源清單、Docker Compose、GitHub Actions等YAML設定檔。

相關推薦

什麼是 YAML?為什麼要把 JSON 轉成 YAML?

YAML(YAML Ain't Markup Language,即 YAML 不是標記語言)是一種人類友善的資料序列化格式,設計目標是讓設定檔易讀易寫。YAML 1.2 是當前穩定版本(yaml.org/spec/1.2.2),由 Clark Evans 在 2001 年提出,現在廣泛用於 Kubernetes、Docker Compose、GitHub Actions、Ansible、CircleCI、Prometheus 等幾乎所有主流 DevOps 工具的設定。YAML 的設計哲學強調可讀性高於簡潔性,因此犧牲了 JSON 那種機器友善的緊湊語法,換來對人類編輯友善的縮排+註解結構。

JSON 與 YAML 互為超集(JSON 是 YAML 的子集),從 JSON 轉 YAML 在技術上是簡單的語法重新格式化,但實際意義巨大:①可讀性提升——YAML 用縮排代替大括號和逗號,關鍵字前的引號也可以省略,可讀性顯著提高;②註解支援——YAML 支援 # 註解,JSON 標準不支援(雖然很多工具透過 #!shebang 或寬鬆解析支援);③多文件支援——YAML 透過 --- 分隔符支援單檔多文件(multi-document),Kubernetes 一個 yaml 檔可包含 Deployment+Service+ConfigMap;④類型自動識別——YAML 不需要引號也能識別數字、布林、null,設定檔更乾淨。

YAML 有三種基本資料結構:①標量(scalar)——字串、數字、布林、null 等單個值;②序列(sequence)——類似 JSON 陣列,用 - 起始表示;③映射(mapping)——類似 JSON 物件,用 key: value 表示。YAML 還有幾種進階結構:錨點(&anchor)和引用(*anchor)允許複用設定區塊;塊樣式(| 保留換行)和折疊樣式(> 換行變空格)控制多行字串輸出;顯式標籤(!!str、!!int)可強制類型。這些特性使 YAML 在複雜設定場景中比 JSON 更強大。

JSON 轉 YAML 的常見動機有:①專案需要部署到 Kubernetes 但現有設定是 JSON 格式;②團隊決定用 YAML 統一管理所有設定檔;③對接第三方 API 時需要 YAML 格式的請求體(OpenAPI、Swagger);④從 API 閘道、CI/CD 平台匯出的 JSON 設定需要轉為人類可讀的 YAML;⑤把 mock 資料從 JSON 轉為 YAML 便於寫測試 fixture。本工具覆蓋了所有這些場景。

轉換過程本質是資料結構重映射:JSON.parse() 把文字解析為 JavaScript 物件(AST),js-yaml 的 dump() 函式遞迴走訪每個節點——字串、數字、布林、null 直接輸出,陣列轉為 - 列表,巢狀物件轉為縮排層級。整個過程純本地完成,不需要任何外部依賴(除了 js-yaml 函式庫本身),轉換結果 100% 相容所有標準 YAML 解析器。

適用場景

  • Kubernetes 資源清單準備:把 Helm 範本、CI/CD 工具產生的 JSON 設定轉為標準的 Deployment/Service YAML
  • Docker Compose 設定:從 docker-compose.json 工具或容器化平台匯出的 JSON 轉為可讀的 docker-compose.yml
  • GitHub Actions / GitLab CI 工作流:把自動化腳本或範本工具產生的 JSON 設定轉為 YAML 流水線檔案
  • Ansible Playbook 編寫:把任務編排 JSON 轉為 Ansible 期望的 YAML 格式,便於團隊程式碼評審
  • 微服務設定統一:把分散在不同微服務中的 JSON 設定統一遷移到 YAML 倉庫管理,版本控制和稽核
  • 從 Swagger/OpenAPI 產生 YAML:把 API 工具匯出的 JSON Schema 轉為 OpenAPI 標準的 YAML 規範
  • 學習 YAML 語法:手頭有現成的 JSON 結構,希望直觀看到 YAML 怎麼表示巢狀物件、陣列、特殊值時使用
  • 設定檔對比與轉換:在 JSON 和 YAML 之間快速轉換做格式對比,幫助選擇最適合專案的設定語言

使用方法

  1. 貼上 JSON 內容到左側編輯器,或點選上傳按鈕選擇 .json / .txt 檔案,也可以點選「範例」載入預設樣本
  2. 工具自動按 YAML 1.2 規範即時轉換,右側即時顯示結果,可點選下拉選單切換 2/4 空格縮排
  3. 如果 JSON 有語法錯誤(尾逗號、單引號、註解等),底部會出現「修復 JSON」按鈕,點選一鍵自動修正
  4. 需要 Unicode 跳脫或字串跳脫時,使用底部工具列的「中文↔Unicode」「跳脫/反跳脫」按鈕一鍵轉換
  5. 結果滿意後點選「複製」按鈕複製 YAML 內容,或點選「下載」儲存為 output.yaml 檔案供專案使用

功能特點

  • 標準YAML 1.2規範輸出:符合官方YAML 1.2規範,可直接用於Kubernetes、Docker Compose、GitHub Actions、Ansible等主流工具
  • 自訂縮排控制:支援2空格和4空格縮排切換,匹配不同專案程式碼風格(YAML官方推薦2空格)
  • 智慧JSON修復:內建tryFixJSON引擎,自動偵測並修復尾逗號、單引號、註解等常見JSON錯誤後再轉換
  • Unicode雙向轉換:一鍵將中文字元轉為\uXXXX Unicode跳脫形式,或將Unicode轉回中文,便於國際化場景
  • 字串跳脫/反跳脫:一鍵給JSON中的雙引號、反斜線、換行加上反斜線跳脫,或將跳脫字串還原
  • JSON格式化與壓縮:左側輸入區支援將JSON格式化為縮排美化版本,或壓縮為單行最小化版本
  • 即時雙向編輯:左側貼上JSON右側即時查看YAML結果,輸入即轉換不需手動點按鈕
  • 檔案上傳與下載:支援上傳.json/.txt檔案,處理後一鍵下載為config.yaml或output.yaml檔案
  • 鍵盤快捷鍵支援:Shift+Cmd/Ctrl+F格式化、C壓縮、U Unicode轉、Z反向、/跳脫、.反跳脫、O上傳、D下載、K清空
  • 拖曳面板與歷史紀錄:PC端左右面板可拖曳調整寬度,自動儲存最近200條歷史便於回溯
  • 跳轉JSON格式化:轉換完成後一鍵跳轉到JSON格式化工具繼續美化、校驗或壓縮來源資料
  • 純前端本地處理:所有解析、轉換、跳脫運算在瀏覽器JavaScript完成,含敏感設定不上傳伺服器

常見問題

怎麼把 JSON 轉成 YAML 格式?

將 JSON 內容貼到左側編輯器,工具會自動按 YAML 1.2 規範轉換為可讀格式:鍵值對變成 key: value,巢狀物件透過縮排表示層級,陣列變成 `- item` 列表語法。轉換完成後可以一鍵複製或下載為 .yaml 檔案使用。如 JSON 有語法錯誤(尾逗號、單引號、註解等),工具會自動嘗試修復後再轉換。

YAML 和 JSON 各自適合什麼場景?

YAML 更適合人類可讀的設定場景——Kubernetes 資源清單、Docker Compose、GitHub Actions、Ansible Playbook、CI/CD 流水線設定。JSON 更適合機器解析和資料交換場景——REST API 請求回應、微服務間通訊、前後端資料傳輸。簡單判斷:寫設定選 YAML,傳資料用 JSON。本工具也支援反向的 YAML 轉 JSON。

JSON 轉 YAML 後縮排應該是 2 空格還是 4 空格?

YAML 官方推薦 2 空格縮排(與 Python 風格一致),這是 Kubernetes、Docker Compose、GitHub Actions 等主流工具的預設風格。但部分專案(如某些 Ansible 舊專案、Google 內部風格)使用 4 空格。本工具支援 2/4 空格自由切換,點選輸出區右上角下拉選單即可即時改變縮排,無需重新轉換。

產生的 YAML 可以直接用於 Kubernetes 嗎?

可以。本工具嚴格遵循 YAML 1.2 官方規範,輸出的 YAML 符合 Kubernetes YAML 解析器(kubectl apply)的語法要求。產生的 YAML 可以直接儲存為 deployment.yaml、service.yaml 等檔案,透過 kubectl apply -f 套用。注意:YAML 對縮排非常敏感,複製時不要引入額外的空格或使用 Tab。

支援產生多文件 YAML(用 --- 分隔)嗎?

當前版本主要用於單文件 JSON → YAML 轉換。如果你的 JSON 是多個獨立物件的陣列,轉換後會按列表形式輸出。如需多文件 YAML(每個物件前用 --- 分隔),轉換後請手動在每個物件前加 --- 分隔符,或使用本站的 YAML 格式化工具進一步處理。

JSON 中包含中文/特殊字元會亂碼嗎?

不會。本工具完全支援 UTF-8 編碼,包括中文、日文、韓文、Emoji 表情、特殊符號等所有 Unicode 字元。如果轉換後需要把中文轉為 \uXXXX 跳脫形式(例如嵌入 JavaScript 字串字面值),可以使用工具底部的「中文轉 Unicode」按鈕一鍵轉換;反向還原用「Unicode 轉中文」。

JSON 字串裡的雙引號和換行要怎麼處理?

YAML 支援多種字串寫法:①無雙引號(適用於不包含特殊字元的簡單字串);②雙引號包裹(支援 \n、\t 等跳脫);③單引號包裹(字面量,不跳脫);④| 塊樣式(保留換行);⑤> 折疊樣式(換行變空格)。本工具預設輸出雙引號風格;如果 JSON 字串裡有換行,YAML 會自動用 \n 跳脫。工具底部提供「跳脫/反跳脫」按鈕處理特殊場景。

JSON 轉 YAML 後所有值都變成字串了嗎?

預設情況下工具會智慧識別並保留 JSON 的原始類型:數字保留為 YAML 數字(不加引號),布林值變為 true/false,null 變為 null 或 ~。但如果你希望所有值都是字串(例如某些設定系統嚴格要求字串),可以在轉換後手動加引號,或者在 JSON 端把所有值包成字串再轉換。

本地瀏覽器轉換,設定檔會上傳嗎?

不會。所有 JSON 解析、YAML 產生、字串跳脫、Unicode 轉換、JSON 修復全部在你的瀏覽器本地 JavaScript 引擎中完成,不會透過網路發送到任何伺服器,斷網也能正常使用。包含資料庫密碼、API 金鑰、Kubernetes Secret 設定的 JSON 可以放心轉換。

故障排查

JSON 報錯「Unexpected token」怎麼辦?

這是 JSON 語法錯誤。常見原因:①結尾多餘的逗號(trailing comma),如 {"a":1,};②單引號代替雙引號,如 {'a':1};③鍵名沒有雙引號,如 {a:1};④註解 // 或 /* */。工具底部有「修復 JSON」按鈕,會自動嘗試補完尾逗號、補雙引號、刪除註解等。修復後重新轉換即可。

kubectl apply 報錯「yaml: invalid character」?

通常是縮排錯誤。YAML 嚴格要求空格縮排,混合使用 Tab 字元會導致解析失敗。檢查:①所有縮排是否都是空格(不是 Tab);②同一層級縮排空格數是否一致(2 或 4 空格);③縮排是否對齊巢狀層級。本工具輸出使用純空格縮排,不會混入 Tab,但如果手工複製貼上時引入了 Tab 就會出問題。

YAML 字串裡的換行變成了 \n 怎麼辦?

預設情況下,JSON 字串中的換行符(\n)轉換為 YAML 時會被跳脫為 \n。如果希望保留真實換行(例如 Docker Compose 的 command 多行、設定檔多行字串),需要在轉換後手動改成 YAML 塊樣式:用 | 符號標識,例如:description: |\n 第一行\n 第二行。或者使用本工具的「反跳脫」按鈕先把 JSON 中的 \n 轉為真實換行再轉換。

轉換後的 YAML 裡 null 值變成了 ~ 符號?

YAML 用 ~ 或 null 表示空值,兩者等價。如果你使用的工具不識別 ~,可以手動替換為 null。或者在工具中切換輸出選項讓所有 null 明確輸出 null 而非 ~。另外注意 YAML 1.1 中 NO/On/Off 會被解析為布林值 false(Norway 問題),YAML 1.2 已修復,本工具輸出符合 1.2 規範。

中文在 YAML 中顯示為 \uXXXX 跳脫形式?

預設情況下,工具輸出原生 UTF-8 中文(不會被跳脫)。如果意外看到 \uXXXX 跳脫形式,是因為:①輸入的 JSON 中原本就是 Unicode 跳脫形式;②點選了底部「中文轉 Unicode」按鈕。可以用「Unicode 轉中文」按鈕反向還原,或在 JSON 來源端把 \uXXXX 改成真實中文字元。

大檔案轉換瀏覽器卡頓怎麼辦?

工具做了即時轉換最佳化(500ms 防抖),但超大檔案(>1MB、幾十萬行)仍可能有壓力。建議:①先用 JSON 格式化工具檢查 JSON 是否合法;②確認是單條大 JSON 而不是多個獨立 JSON 拼接;③超大設定檔(10MB+)建議用命令列工具如 yq、kubectl convert 處理;④如果瀏覽器卡死,關閉多餘 tab 釋放記憶體後重試。

術語表

YAML
YAML Ain't Markup Language(遞迴縮寫),一種人類可讀的資料序列化格式,是 Kubernetes、Docker Compose、Ansible 等 DevOps 工具的事實標準設定語言。
縮排(Indentation)
YAML 用縮排(必須是空格,不能用 Tab)表示層級關係,縮排錯誤會導致設定解析失敗或含義改變,是 YAML 最常見的坑。
序列(Sequence)
YAML 的陣列表示,用 - item 表示每個元素,相當於 JSON 的陣列。
映射(Mapping)
YAML 的物件表示,用 key: value 表示每個鍵值對,相當於 JSON 的物件。
塊樣式(Block Scalar |)
YAML 多行字串寫法,用 | 符號標識,所有換行和縮排都會被保留,相當於 heredoc。
折疊樣式(Folded Scalar >)
YAML 多行字串寫法,用 > 符號標識,單個換行會被替換為空格,連續兩個換行才保留為段落分隔。
錨點與引用(Anchor & Reference)
YAML 用 &name 定義錨點,用 *name 引用同一份設定,避免重複,常見於 K8s 同一 Secret 在多處引用。
YAML 1.2
YAML 當前穩定版本規範(2009 年發布,2021 年小修訂),本工具嚴格遵循此版本(yaml.org/spec/1.2.2)。
多文件 YAML(Multi-document)
YAML 支援單檔多文件,用 --- 分隔符分開不同文件,Kubernetes 一個 yaml 檔可包含 Deployment+Service+ConfigMap 多個資源。
Kubernetes YAML
Kubernetes 資源清單的 YAML 格式,必須包含 apiVersion、kind、metadata、spec 四個必填欄位,是 K8s 部署的事實標準。
Norway 問題(YAML 1.1)
YAML 1.1 規範將 NO/On/Off 等解釋為布林值 false,導致國家名解析錯誤,YAML 1.2 已修復此問題,本工具輸出符合 1.2 規範。
Docker Compose
Docker 多容器編排工具的設定檔,YAML 格式,定義 services、networks、volumes 等節,是容器化部署的事實標準。

JSON 類型與 YAML 寫法映射表

本工具按以下規則將 JSON 類型轉換為 YAML 類型:

JSON 類型YAML 寫法說明
stringname: "Alice"YAML 預設無引號,含特殊字元時需雙引號
integerport: 8080YAML 自動識別數字類型,無引號
floatratio: 3.14浮點數同整數,YAML 自動識別
booleanenabled: trueYAML 僅小寫 true/false,YAML 1.1 還支援 yes/no
nullvalue: null 或 value: ~YAML 用 null 或波浪號表示空值
array- item1\n- item2YAML 用 - 起始每行一個元素
objectkey:\n sub: value物件用 key: value,巢狀用縮排表示
object array- name: a\n- name: b物件陣列用 - 後接鍵值對

YAML 字串樣式對照表

YAML 支援 6 種字串寫法,按需選擇:

樣式語法範例適用場景
無引號name: Alice簡單字串,最常用
雙引號name: "Alice"含特殊字元、支援 \n 等跳脫
單引號name: 'Alice'字面量字串,不跳脫
塊樣式bio: |\n line1\n line2保留所有換行和縮排(heredoc)
折疊樣式bio: >\n line1\n line2單換行變空格,雙換行分段
顯式標籤value: !!str 123強制類型,覆寫預設推斷

JSON 轉 YAML 範例對照

複雜 JSON 結構對應的 YAML 輸出:

結構範例
JSON 輸入{"name": "app", "port": 8080}
YAML 輸出name: app port: 8080
JSON 輸入{"server": {"host": "0.0.0.0", "port": 443}}
YAML 輸出server: host: 0.0.0.0 port: 443
JSON 輸入{"hosts": [{"ip": "10.0.0.1"}, {"ip": "10.0.0.2"}]}
YAML 輸出hosts: - ip: 10.0.0.1 - ip: 10.0.0.2
JSON 輸入{"spec": {"replicas": 3, "image": "nginx:1.25"}}
YAML 輸出spec: replicas: 3 image: nginx:1.25

Privacy & Security

本工具所有 JSON 解析、YAML 產生、字串跳脫、Unicode 轉換、JSON 智慧修復、檔案讀取全部在瀏覽器本地 JavaScript 引擎中執行,你的 JSON 內容和產生的 YAML 設定不會透過網路發送到任何伺服器,也不會被記錄或分析。包含資料庫密碼、API 金鑰、Kubernetes Secret 設定的 JSON 可以放心轉換。本地歷史僅儲存在你自己瀏覽器的 localStorage 中,關閉瀏覽器或清空快取即可刪除。

Authoritative References