開發者工具·語法轉換器
比較四種資料模型:為什麼 JSON、YAML、TOML 和 XML 從不對應 1:1
· 背景
資料格式 json yaml
這些格式之間的每次轉換都會在某些地方有損,因為每種格式都是圍繞著不同的資料模型設計的。這篇文章比較了它們的類型系統和結構,以便您可以預測轉換將保留什麼以及將刪除什麼。
不會往返的配置 - 透過三種格式轉換的檔案和傳回不同的欄位
包含安全數字、字串、布林值、陣列和巢狀物件的普通物件可以透過 JSON-to-YAML-to-JSON 和 JSON-to-TOML-to-JSON 測試。在 TOML 之前加入 null、來自 TOML 的日期時間、混合 XML 內容或 YAML 註釋,以及某些值或來源資訊變更。
有用的問題不是轉換是否普遍有損。它是哪個輸入類別和哪個方向保留您需要的屬性。 ToolAcre 的警告和拒絕使該矩陣變得可觀察,而不是將每一對簡化為一個行銷承諾。
代表性配置可以在某些對之間往返,但不是每個受支援的形狀
JSON 在此解析器中提供 null、布林值、數字、字串、陣列和物件。它沒有註釋、日期時間類型或共享引用語法。 JavaScript 將數字解析為 IEEE-754 雙精度數,因此超出安全範圍的已未加引號的整數可能會在其他編寫者看到它之前失去精度。
物件鍵是字串,可選的排序會改變它們的呈現方式。數組保持有序。嚴格的解析拒絕註釋、尾隨逗號和非有限數字標記,為其他讀者建立緊湊的基線。
此 JavaScript 實作使用的 JSON 的價值模型
ToolAcre 透過受限的 JSON 或核心架構接受 YAML。錨點和別名解析,註釋消失,流變成數組,重複的鍵保留最後一個值並帶有警告,並拒絕遞歸或爆炸性別名。
自訂標籤、二進位、時間戳記、集合和語言物件建構函式將被拒絕。 Core Infinity 和 NaN 在目標格式中變成空並帶有警告。這是有意成為 YAML 更廣泛的標籤系統的子集,而不是完整的 YAML 物件支援。
ToolAcre 接受受限的 YAML 模型
TOML 以表格開頭,支援字串、有符號整數、浮點數、布林值、陣列、表格和四種臨時類型。它沒有空值。 ToolAcre 將日期和時間轉換為以來源為導向的字串,將寬整數轉換為十進位字串,而不是遺失數字。
當寫入 TOML 時,空物件鍵被省略,空數組條目變成空字串。根數組和標量被拒絕。註釋和作者在標題、點鍵和內聯表之間的選擇不會透過純值傳回。
TOML 的根表、臨時值和空邊界
XML 投影為具有 `@` 屬性、普通子鍵、`#text`、`#cdata`、重複同級數組和文字命名空間前綴的樹。評論、宣告和處理說明將被刪除。混合文字位置遺失,在重複出現之前無法知道一對多。
除非選擇推理,否則值將以字串形式讀取。從 JSON 寫入的 Null 成為空元素,並在傳回時無法與空字串區分開。每個 DOCTYPE 都會被拒絕,無效的名稱會停止序列化而不是被重寫。
ToolAcre 的 XML 投影:元素、屬性、文字和文字前綴
九個方向傳送:JSON 到 YAML、XML、TOML 和 CSV; YAML 到 JSON 和 TOML; TOML 到 JSON 和 YAML; XML 到 JSON。 JSON 形式的普通值在 JSON 和 YAML 之間效果最好。 TOML 引入了日期和空邊界。 XML 需要命名和節点類別約定。
CSV 是一個平坦的異常值,僅作為輸出。陣列或選取的物件變成行,嵌套路徑展平為點列,空值與空白文字合併,類似公式的字串被中和。 CSV-to-JSON、XML-to-TOML 和其他不存在的對將被拒絕而不是推斷。
九個出貨方向的相容性矩陣,僅以 CSV 作為輸出
二進位格式和模式語言超出了範圍。模式可以恢復清單基數或驗證業務形狀,而二進位編碼引入了此處未表示的位元組級類型和框架。轉換器從未聲稱具有這些功能。
語法轉換也不能證明應用程式的有效性。乾淨的 Kubernetes 形狀的 YAML、XML 訂單訊息或 TOML 專案檔案仍然可能違反目標合約。檢查語法映射後使用網域驗證器。
重點:選擇模型,然後選擇語法 - 以及語法轉換器面板如何讓您在提交之前測試轉換
在選擇標點符號之前選擇資料模型。如果註解和別名很重要,則 JSON 躍點無法保留它們。如果 null 很重要,則 TOML 輸出會變更它。如果有序的混合內容很重要,那麼簡單的 JSON 投影是不夠的。如果目標是資料表,則巢狀 JSON 需要明確展平約定。
使用 ToolAcre 測試一份代表性檔案並閱讀每個警告。結果是關於具體對和輸入的證據,而不是允許調用所有無損轉換或每個支援的解析器完成。
從對您的服務重要的邊界建立代表性檔案:空、空文字、大識別碼、類似日期的字串、一重複記錄、註解或別名(如果涉及 YAML),以及混合文字(如果涉及 XML)。在每個支持的躍點後比較標準化值並保留結果的警告。此矩陣成為所選模型的決策工件,而不是對熟悉語法的模糊偏好。