繁體中文

開發者工具 · 語法轉換器

JSON 到 YAML 轉換的工作原理:引用、縮排和流程樣式

· 工作原理

json yaml 開發人員工作流程

巢狀的 JSON 物件變更為縮排的 YAML 服務定義
原始 ToolAcre 向量圖

JSON 到 YAML 看起來像是刪除大括號的問題,但轉換器可以真正決定哪些字串需要引號以及何時使用區塊樣式與流樣式。這篇文章將詳細介紹這些決定。

大括號消失了,但引號去了哪裡? — 轉換為 YAML 的 JSON 負載以及結果中帶引號和裸字串的混合

刪除大括號和引號不會使 JSON 物件成為值得信賴的 YAML 檔案。轉換器必須決定如何表示巢狀映射、陣列、字串和換行符,以及看起來像數字或布林值的值是否保留為文字。將 API 服務定義移至 Compose 的 DevOps 工程師需要在將結果複製到部署目錄之前可以預測這些決策。轉換更改語法,而不是服務的實際配置。

JSON(幾乎)已經是 YAML——為什麼在轉換開始之前輸入就是有效的 YAML 1.2 流樣式

YAML 1.2 將 JSON 語法視為普通 JSON 形狀資料允許的串流子集,這解釋了為什麼 JSON 物件已經接近 YAML。但有用的轉換通常會切換為人類可讀的區塊樣式縮排。輸入首先被解析為 JSON;任意 shell 命令永遠不會被執行。 ToolAcre 透過反向路徑上的受限架構載入 YAML,拒絕不安全標籤並限制別名擴展,因此轉換器不能用於從不受信任的 !!js/function 標籤實例化任意物件。

區塊樣式與流樣式 - 轉換器如何選擇基於縮排的映射和序列而不是大括號和方括號,以及縮排深度的含義

區塊樣式使用縮排的鍵/值對和以破折號開頭的行來表示數組項目:services.web 下的圖像字串在 web 下方縮進,而 ports 則成為序列。 Flow 樣式保留類似 JSON 的大括號和中括號。 ToolAcre 使用預設兩空格縮排的 js-yaml 轉儲、無引用和無限行寬設置,而不是僅用正規表示式替換標點符號。更改縮排寬度會影響可讀性,而不是實際的鍵或陣列順序。

哪些字符串必须保留引号 - 否则将变成布尔值、数字、空值或日期的值,以及带有冒号、散列或前导空格的字符串

某些字串必須加引號才能在另一個解析器中生存:「false」應保留文字而不是布林值 false,「2026-09-28」不應默默地成為 YAML 1.1 使用者中的日期,冒號後跟空格可能會被誤認為是映射語法。 ToolAcre 的轉儲程式選擇保護性引號,包括針對舊版 YAML 閱讀器的相容性選擇。並非總是需要用冒號引用普通圖像引用,並且無緣無故地刪除存在的引號可能會中斷往返。驗證類型以及視覺外觀。

多行字串 — JSON 字串中的換行符號如何成為文字 (|) 或折疊 (>) 區塊標量

包含實際換行符的 JSON 字串可以使用 | 呈現為 YAML 區塊標量。 |- 形式會移除最後的換行符,而 |保留它; > 會將一些換行符折疊成空格。這些指標描述數據,而不是格式化裝飾。 ToolAcre 的轉儲器選擇一種可以讀回原始字串的表示形式,而不是總是強制使用一種樣式。轉換後,仔細檢查多行環境值或憑證:此處的縮排錯誤可能會變更應用程式收到的內容。

工作範例:將服務定義(巢狀的 JSON 物件)轉換為 YAML,並註釋每個引用和樣式決策

對於特定的 JSON 對象,請使用 services.web 以及圖像“example/web:1”、端口 [“8080:80”] 和環境鍵 DEBUG="false"、RELEASE="2026-09-28" 和 MESSAGE="line one\nline secondary"。 ToolAcre 發出圖像:example/web:1 和連接埠清單; DEBUG 變成帶引號的“false”,RELEASE 變成帶引號的“2026-09-28”,MESSAGE 使用帶有兩行縮排的 |- 區塊。每個選擇都會保護原始類型。在儲存為 compose.yaml 之前執行面板的往返檢查;轉換器無法判斷影像是否存在或服務是否將啟動。

這不包括新增註解、錨點或自訂鍵順序,這些都不存在於要繼承的 JSON 來源中

JSON 沒有要保留的註解、錨點或別名:轉換器無法從從未包含它們的輸入中復原它們。它還無法推斷 Compose 特定的秘密管理、自訂金鑰順序或 Kubernetes API 版本有效性。兩個 YAML 檔案可以序列化相同的數據,但使用不同的空格和引號樣式。檢查目標程式中的結果,並避免將真實的 API 令牌貼到外部轉換服務中。

重點:轉換是使用規則的重新序列化 - 以及語法轉換器面板如何在瀏覽器中產生 YAML

轉換是在一組規則下解析和重新序列化,而不是刪除標點符號。語法轉換器在您的瀏覽器中執行這些操作;在將該方法應用於較大的檔案之前,請在本機檢查敏感配置並在小型測試物件上執行往返。如果引用的值在返回時更改類型,則格式不僅僅是裝飾性的,而且需要進行調查。