代码之家  ›  专栏  ›  技术社区  ›  Tomas Aschan

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

  •  -1
  • Tomas Aschan  · 技术社区  · 6 年前

    考虑以下文件:

    foo:
      bar: Yes
    

    根据 the spec ,这应解释为 Boolean ,而不是作为 String

    然而 it seems 本文件产生相同的解释:

    foo:
      bar: 'Yes'
    

    如果我误解了 'Yes' (在引号中)实际上应理解为 一串 -键入的值,我可以在规范中的什么地方找到这样做的理由?

    然而,如果我的解释正确,并且这些文档根据规范是等效的,那么如何使用值指定字符串呢 "Yes" 作为YAML财产的价值?

    2 回复  |  直到 6 年前
        1
  •  27
  •   JGK    6 年前

    视情况而定;-)

    在里面 YAML 1.1 布尔类型定义如下:

    布尔值表示真/假值。布尔值格式为英文单词(真/假、是/否或开/关),以便于阅读,并且可以缩写为单个字符y/n或y/n。

    在里面 YAML 1.2 布尔类型定义如下:

    布尔语:[真,真,假,假]

    指定值 Yes 通过引号对键进行:

    foo: 'Yes'
    bar: "Yes"
    

    应使用指定布尔值并与将来版本的YAML解析器兼容

    foo: false
    bar: True
    

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

        2
  •  2
  •   Anthon    6 年前

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

    应用程序特定的标记解析规则应限于解析?非特定标记,通常用于解析普通标量。这些可以与一组正则表达式匹配,以提供整数、浮点、时间戳和类似类型的自动解析。

    布尔值就是这些“相似类型”之一。所以 True 将被解释为布尔值和 "True" 'True' (因为它们不是纯标量)作为字符串。

    在过时的YAML 1.1规范中 Yes On (和它们的相反,所有这些都是大写的,都是小写的)也被解释为布尔,但这个概念从1.2规范中删除了。

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

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

    除第一个之外,所有的解析器都将使用仅支持YAML 1.1标准的解析器。当然,您可以通过使用YAML指令和指令结束指示符显式地开始文档,确保后续处理“知道”您期望的内容

    %YAML 1.2
    ---