繁體中文

開發者工具·語法轉換器

挪威問題:YAML 1.1 與 1.2 以及為何 NO 變成 false

· 背景

yaml 資料格式 偵錯

當遺留布林路徑被劃掉時,文字不會保留字串
原始 ToolAcre 向量圖

在 YAML 1.1 中,未加引號的值 NO 是一個布林值,這就是挪威從國家列表中消失的原因。這篇文章講述了 YAML 隱式類型的歷史、1.2 規範的變更以及為什麼問題在當今的工具中仍然存在。

缺少一個國家的清單 - NO 被解析為錯誤,以及來自奧斯陸辦事處的錯誤報告

典型的錯誤是未加引號的國家代碼 `NO` 變成錯誤。 ToolAcre 的測試證明這裡不會發生這種情況:兩個模式選項都會保留 `NO`、yes、no、on 和 off 作為字串。以挪威消失在該面板中的故事開頭將與實施相矛盾。

此範例作為相容性警告仍然有用。當另一個 YAML 消費者使用舊規則時,ToolAcre 的編寫者會引用不明確的字串,以便下游讀者不會重新解釋它們。讀取器和寫入器被配置為防止大綱描述的故障。

挪威不會在此轉換器中消失:NO 保留文字

此儲存庫記錄了 js-yaml 的受限 JSON 和核心模式及其觀察到的標量行為。它不包含 YAML 的 2001 起源、作者意圖或歷史設計辯論的來源。這些主張被省略,而不是從記憶重建。

目前機制足以作為實用指南。普通標量解析發生在選定的模式下;引用的值仍然是文字;不支援的標籤將被拒絕。有關代碼的證據不應延伸到無源標準歷史。

儲存庫證據涵蓋目前解析器配置,而不是 YAML 的原始歷史記錄

YAML 1.1 通常將 yes、no、on 和 off 變數視為布林值。這就解釋了為什麼挪威問題存在於某些生態系中。 ToolAcre 不公開 1.1 開關,並從不示範在這種模式下的六十進位或舊八進位轉換。

使用風險來檢查外部解析器輸出,而不是預測此面板。如果另一個工具產生錯誤,請記錄其庫和模式。 ToolAcre 的結果可以作為對比 YAML 1.2 讀數,但不能作為其他實現為其合約配置不正確的證據。

舊版 YAML 1.1 布林值解釋了危險,但此處未啟用

嚴格的 JSON 模式僅辨識 JSON 相容的標量拼字。核心也將波浪號和空值解析為 null、十六進位或 `0o` 整數和非有限數字。兩者都沒有將布林詞彙擴展到 true 和 false 之外。

Core Infinity 和 NaN 隨後在 JSON 中變為 null 並帶有警告,因為 JSON 沒有它們的表示。因此,儘管挪威值本身保持穩定,模式選項之間的差異是可見的,有時甚至是有損的。

兩個附帶選項皆為 YAML 1.2 模式

只要解析器預設值或應用程式約定保留舊行為,它就會繼續存在。轉換器無法從儲存庫證據中清點這些庫或版本。使用包含模糊單字和數字相似項的固定裝置來測試實際的消費者。

ToolAcre 的 YAML 編寫器在老讀者可能會以不同方式輸入的字串周圍添加保護性引號,包括 `NO`、`yes`、`1.0`、`0755` 和日期文字。這種相容性輸出是可測量的,並比關於現代解析器採用的籠統宣告更安全。

此危險在其他解析器中仍然存在;驗證它們而不是從這個工具中概括

轉換 `countries: [SE, NO, DK]`、`answers: [yes, no, on, off]`、`mode: 0755`、`octal: 0o755`、`version: 1.10` 與 `empty:`。在嚴格情況下,除 JSON 之外的所有本機值都保留為字串。在Core下,八進位變成493,空變成null;國家和答案詞仍然是字串。

引用每個標記以強製文字。然後將 JSON 結果寫回 YAML 並檢查序列化器選擇的引號。這種程式碼精確的比較揭示了該工具的規則,而無需假裝執行不存在的 YAML 1.1 模式。

工作範例:兩個交付模式下的國家代碼和標量相似項

特定於語言的解析器開關、版本預設值和框架包裝器不在此實作之外。他們的名字和行為獨立改變。諮詢並測試將使用該配置的組件。

此面板也不驗證應用程式語意。對於國家/地區程式碼來說,將 `NO` 保留為字串是必要的,但它不能證明 `NO` 是特定架構中允許的值。

重點:引用您的字串,了解解析器的版本 - 以及如何在瀏覽器中將 YAML 轉換為 JSON 使隱式類型可見

引用可以重新輸入的文字,了解實際使用的模式並測試消費者。 ToolAcre 的兩個 YAML 1.2 選項使它們有限的差異可見,並刻意避免遺留的布爾陷阱。

教訓並不是每個解析器都以一種方式運作。隱式類型是配置,轉換器應該宣告該配置。這裡的證據顯示挪威仍然處於 `"NO"` 狀態。

當配置跨系統時,新增包含您的網域允許的每個不明確令牌的互通性固定裝置。在每個真實的消費者中轉換或解析它並比較鍵入的值,而不是呈現 YAML。這會在國家/地區清單或權限模式達到生產之前捕獲舊版布林表、八進制規則或空值差異。引用已知字串仍然是最簡單的便攜式防禦,因為它在檔案中記錄意圖而不是依賴環境預設值。