Yaml-cpp 解析器无法正确处理键:值片段



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

以下 yaml 片段:

- { a: b }

正确解析为键:值元素,键=a和值=b。但是当我将片段更新为此时:

- { a:b }

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

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

谢谢!

这是

正确的行为。从 YAML 规范:

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

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

例如,您可以编写:

- { "a":b }

然而,正如他们指出的那样,这不是很好读;坚持在冒号后加一个空格。

最新更新