本周早些时候,Haroen Viaene 在 Twitter 上发布了关于 YAML 的一条推文:

YAML 最糟糕的部分:https://yaml.org/type/bool.html — Haroen Viaene (@haroenv) 2022 年 1 月 10 日

链接的页面包含了 YAML 中布尔值的定义文档,详细说明了可以使用以下[regex]*进行解析:

y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

~ 在某些情况下,这会带来问题的原因是“挪威问题”。当您将挪威缩写为其 ISO 3166-1 ALPHA-2 形式 NO 时,YAML 在解析时会返回 false

countries:
- GB
- IE
- FR
- DE
- NO
>>> from pyyaml import load
>>> load(the_configuration)
{'countries': ['GB', 'IE', 'FR', 'DE', False]}

👉 解决方案是使用双引号转义这些值,或者使用一个库(例如 Python 的 StrictYAML),它不会将 NO 转换为 False。 ~

YAML 中其他有问题的数值包括以 .0 结尾的版本号和诸如 Null 的姓氏。默认情况下,它们分别会被转换为数字或 NULL

挪威问题 → StrictYAML →

* [regex]: 正则表达式