Yaml-cpp解析器无法正确处理key:value片段

时间:2013-09-25 12:04:18

标签: yaml-cpp

今天我在yaml-cpp库中发现了以下奇怪的行为。

关注yaml片段:

- { a: b }

被正确解析为key:value元素,其中key = a,value = b。但是当我将片段更新为:

- { a:b }

片段被评估为标量值“a:b”。

这是正确的行为吗?是否有一种简单的方法可以强制解析器将此片段评估为关键:值?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是正确的行为。来自YAML spec

  

通常,YAML坚持使用空格将“:”映射值指示符与值分开。这种限制的好处是“:”字符可以在普通标量中使用,只要它后面没有空格。这允许不带引号的URL和时间戳。它也是混淆的潜在来源,因为“a:1”是一个普通的标量,而不是一个关键:价值对。

     

...

     

为确保JSON兼容性,如果流映射中的键与JSON类似,则YAML允许在“:”旁边指定以下值。这不会引起歧义,因为所有类似JSON的键都被指示符包围。

例如,你可以写:

- { "a":b }

然而,正如他们所指出的,这不是很可读;坚持在结肠后放一个空格。