请考虑以下文档:
foo:
bar: Yes
根据the spec,应将其解释为Boolean
,而不是String
。
然而,it seems对本文档产生了相同的解释:
foo:
bar: 'Yes'
如果我误解了,实际上应该将'Yes'
(用引号引起来)理解为String
类型的值,我在规范中可以找到理由吗?
但是,如果我正确解释了这些文档,并且按照规范等效,那么如何指定值为"Yes"
的字符串作为YAML属性的值呢?
答案 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
上使用YAML语法进行游戏。
答案 1 :(得分:0)
最新的YAML规范(您链接到9年前已替换的东西)指出:
应将特定于应用程序的标签解析规则限制为解析“?”非特定标签,最常见的是解析纯标量。这些可以与一组正则表达式匹配,以提供整数,浮点数,时间戳和类似类型的自动解析。
布尔值是这些“相似类型”之一。因此,True
将被解释为布尔值,而"True"
或'True'
(因为它们不是简单的标量)将被解释为字符串。
在过时的YAML 1.1规范Yes
和On
中(以及它们的相反之处,以及所有大写形式,全部为小写形式)也被解释为布尔值,但该概念从1.2规范。
因此,您想将字符串“是”(不带引号)表示为一个值,如果您确定您的数据将由2009年之后更新的解析器读取,则可以使用纯标量,单引号,双引号或,例如块样式的文字标量(假设一个序列具有单个键/值映射,并且具有键[1, 2]
):
- [1, 2]: Yes
- [1, 2]: 'Yes'
- [1, 2]: "Yes"
- [1, 2]: |
Yes
除第一个以外的所有内容还可以与仅支持YAML 1.1标准的解析器一起使用。当然,您可以通过使用YAML指令和指令结束指示符显式启动文档来确保以后处理“了解”您的期望
%YAML 1.2
---