在YAML属性中指定字符串值“是”

时间:2018-12-06 09:31:07

标签: yaml

请考虑以下文档:

foo:
  bar: Yes

根据the spec,应将其解释为Boolean,而不是String

然而,it seems对本文档产生了相同的解释:

foo:
  bar: 'Yes'

如果我误解了,实际上应该将'Yes'(用引号引起来)理解为String类型的值,我在规范中可以找到理由吗?

但是,如果我正确解释了这些文档,并且按照规范等效,那么如何指定值为"Yes"的字符串作为YAML属性的值呢?

2 个答案:

答案 0 :(得分:0)

这取决于;-)

YAML 1.1中,布尔类型定义如下:

  

布尔值表示true / false值。为了便于阅读,布尔值的格式设置为英文单词(“ true” /“ false”,“ yes” /“ no”或“ on” /“ off”),并可以缩写为单个字符“ y” /“ n”或“ Y” /“ N”。

YAML 1.2中,布尔类型定义如下:

  

布尔值:[true,true,false,FALSE]

通过引号将值Yes分配给键:

foo: 'Yes'
bar: "Yes"

分配布尔值并与未来版本的YAML解析器兼容应该使用

foo: false
bar: True

您可以在https://yamlvalidator.com/

上使用YAML语法进行游戏。

答案 1 :(得分:0)

最新的YAML规范(您链接到9年前已替换的东西)指出:

  

应将特定于应用程序的标签解析规则限制为解析“?”非特定标签,最常见的是解析纯标量。这些可以与一组正则表达式匹配,以提供整数,浮点数,时间戳和类似类型的自动解析。

布尔值是这些“相似类型”之一。因此,True将被解释为布尔值,而"True"'True'(因为它们不是简单的标量)将被解释为字符串。

在过时的YAML 1.1规范YesOn中(以及它们的相反之处,以及所有大写形式,全部为小写形式)也被解释为布尔值,但该概念从1.2规范。

因此,您想将字符串“是”(不带引号)表示为一个值,如果您确定您的数据将由2009年之后更新的解析器读取,则可以使用纯标量,单引号,双引号或,例如块样式的文字标量(假设一个序列具有单个键/值映射,并且具有键[1, 2]):

- [1, 2]: Yes
- [1, 2]: 'Yes'
- [1, 2]: "Yes"
- [1, 2]: |
    Yes

除第一个以外的所有内容还可以与仅支持YAML 1.1标准的解析器一起使用。当然,您可以通过使用YAML指令和指令结束指示符显式启动文档来确保以后处理“了解”您的期望

%YAML 1.2
---