今天我在yaml-cpp库中发现了以下奇怪的行为。
以下 yaml 片段:
- { a: b }
正确解析为键:值元素,键=a和值=b。但是当我将片段更新为此时:
- { a:b }
片段被评估为标量值"a:b"。
这是正确的行为吗?有没有一种简单的方法可以强制解析器将此片段评估为键:值?
谢谢!
正确的行为。从 YAML 规范:
通常,YAML 坚持用空格将 ":" 映射值指示器与值分隔。此限制的一个好处是,":" 字符可以在普通标量中使用,只要它后面没有空格即可。这允许使用不带引号的 URL 和时间戳。它也是混淆的潜在来源,因为"a:1"是一个普通的标量,而不是一个键:值对。
。
为了确保 JSON 兼容性,如果流映射中的键类似于 JSON,则 YAML 允许在 ":" 旁边指定以下值。这不会造成歧义,因为所有类似 JSON 的键都被指示器包围。
例如,您可以编写:
- { "a":b }
然而,正如他们指出的那样,这不是很好读;坚持在冒号后加一个空格。