今天我在yaml-cpp库中发现了以下奇怪的行为。
关注yaml片段:
- { a: b }
被正确解析为key:value元素,其中key = a,value = b。但是当我将片段更新为:
- { a:b }
片段被评估为标量值“a:b”。
这是正确的行为吗?是否有一种简单的方法可以强制解析器将此片段评估为关键:值?
谢谢!
答案 0 :(得分:0)
这是正确的行为。来自YAML spec:
通常,YAML坚持使用空格将“:”映射值指示符与值分开。这种限制的好处是“:”字符可以在普通标量中使用,只要它后面没有空格。这允许不带引号的URL和时间戳。它也是混淆的潜在来源,因为“a:1”是一个普通的标量,而不是一个关键:价值对。
...
为确保JSON兼容性,如果流映射中的键与JSON类似,则YAML允许在“:”旁边指定以下值。这不会引起歧义,因为所有类似JSON的键都被指示符包围。
例如,你可以写:
- { "a":b }
然而,正如他们所指出的,这不是很可读;坚持在结肠后放一个空格。