1

today I found following strange behavior in yaml-cpp library.

Following yaml fragment:

- { a: b }

is correctly parsed as key:value element with key=a and value=b. But when I updated fragment to this:

- { a:b }

fragment is evaluated as scalar value "a:b".

Is this correct behavior? And is there a simply way how to force parser to evaluate this fragment as key:value ?

Thanks!

4

1 回答 1

0

这是正确的行为。来自YAML 规范

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

...

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

例如,您可以编写:

- { "a":b }

但是,正如他们指出的那样,这不是很可读。坚持在冒号后面加一个空格。

于 2013-09-25T13:19:04.363 回答