YAML 语义差异检查器

粘贴 YAML 文档,查看解析器遵循 YAML 1.1 还是 YAML 1.2 标签解析规则时,哪些值会被不同解释。这不是语法验证器,而是语义检查器。

在您的浏览器中本地处理。文件绝不会被上传。

使用方法 工具

  1. 粘贴 YAML 或上传 .yaml/.yml 文件;内容不会离开浏览器。
  2. 选择“检查 YAML”。
  3. 查看每个标记的值:在 YAML 1.1 和 YAML 1.2 下各自的含义,以及差异的影响。
  4. 使用建议的可移植改写,或复制完整修正文档,以消除歧义。

假设条件

来源与参考数据

方法说明

分别使用 YAML 1.1 标签解析正则和 YAML 1.2 Core Schema 正则解析文档中每个 plain 标量值。如果两个 schema 对结果类型或值有分歧,就会标记。布尔值/空值分歧标为可能导致问题,因为它会静默反转真/假逻辑;数字或时间戳分歧则标为需要检查,因为值或类型会变化,但较不容易直接反转条件判断。

计算示例

经典的“挪威问题”

输入项: country: NO

结果: YAML 1.1 将 NO 解释为布尔值 false;YAML 1.2 将其解释为字符串“NO”。标记为可能导致问题,并建议写作 `country: "NO"`。

带前导零的数字

输入项: retries: 0123

结果: YAML 1.1 将 0123 解释为八进制(83);YAML 1.2 将其解释为十进制(123),同一文本表示两个不同数字。

实用指南
常见错误

常见问题

为什么 `enabled: yes` 会变成 true?

YAML 1.1 布尔词列表会把任意大小写组合的“yes”解析为 true。YAML 1.2 Core Schema 只将 true/false 识别为布尔值,因此同一文本会保留为字符串“yes”。

YAML 的挪威问题是什么?

挪威的 ISO 国家代码 NO 同时也是 YAML 1.1 中表示 false 的布尔词之一。因此在 YAML 1.1 解析器中,未加引号的 `country: NO` 会静默变成 `country: false`。

给值加引号总是安全吗?

是。带引号的标量(`"yes"`、`'NO'`)在所有 YAML schema 中都会被当作显式字符串。本工具不会标记已加引号的值。

为什么 PyYAML 会把 `yes` 或 `no` 变成布尔值?

PyYAML 常用 SafeLoader 应用 YAML 1.1 风格布尔解析,其中 plain `yes` 为 true、`no` 为 false。因此 `country: NO` 可能加载为布尔值,而 YAML 1.2 Core Schema 会保留 NO 为字符串。本工具比较公布的 schema 规则,不会运行 PyYAML 或验证具体加载器配置。

上次审核:

这是标量解析检查器,而非完整 YAML 解析器:不分析 flow 集合、块标量、锚点/别名或合并键(更广泛检查请用 YAML 跨运行环境预检)。它比较公布的两个 schema,而非特定库的实际行为;实际行为有时会偏离规范,详见假设。

主题和工具偏好设置,以及已保存和最近使用的列表仅存储在此浏览器中。