简体中文

开发者工具·语法转换器

挪威问题:YAML 1.1 与 1.2 以及为什么 NO 变为 false

· 背景

yaml 数据格式 调试

当遗留布尔路径被划掉时,文本不会保留字符串
原始 ToolAcre 矢量图

在 YAML 1.1 中,未加引号的值 NO 是一个布尔值,这就是挪威从国家/地区列表中消失的原因。这篇文章讲述了 YAML 隐式类型的历史、1.2 规范的更改以及为什么问题在当今的工具中仍然存在。

缺少一个国家的列表 - NO 被解析为错误,以及来自奥斯陆办事处的错误报告

经典错误是未加引号的国家/地区代码 `NO` 变为 false。 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。这会在国家/地区列表或权限模式达到生产之前捕获旧版布尔表、八进制规则或空值差异。引用已知字符串仍然是最简单的便携式防御,因为它在文档中记录意图而不是依赖环境默认值。