无法使用yaml-cpp释放空值

Can't Emit an Empty Value with yaml-cpp

我想发出一个空值,但是当我指定要发出的空字符串时,输出在技术上并不是空的。

代码段:

1
2
3
4
YAML::Emitter out;
std::string name;
out << YAML::Key <<"name";
out << YAML::Value << name;

预期的yaml输出:

1
name:

实际yaml输出:

1
name:""

如您所见,我定义了一个空字符串,并且我希望yaml输出实际上是空的。
这是预期的行为吗?如果是这样,是否有解决此问题的方法?我的目标是使我的整个Yaml输出无报价。


YAML

1
name:

没有键name的字符串值;它实际上是一个空值。参见例如此处的在线解析器;规范的YAML表示为:

1
2
3
4
!!map {
  ? !!str"name"
  : !!null"null",
}

yaml-cpp试图确保您告诉它的内容("写此空字符串")是如何解析生成的YAML,因此它将空字符串写为""

如果要写入空值,则不要写入值或写入YAML::Null。后者(我相信)会产生

1
name: ~

这是null的规范形式。