无法使用 yaml-cpp 发出空值
Posted
技术标签:
【中文标题】无法使用 yaml-cpp 发出空值【英文标题】:Can't Emit an Empty Value with yaml-cpp 【发布时间】:2020-05-01 21:12:30 【问题描述】:我想发出一个空值,但是当我分配一个要发出的空字符串时,输出在技术上并不是空的。
代码片段:
YAML::Emitter out;
std::string name;
out << YAML::Key << "name";
out << YAML::Value << name;
预期的 yaml 输出:
name:
实际 yaml 输出:
name: ""
如您所见,我定义了一个空字符串,并且我希望 yaml 输出实际上是空的。 这是预期的行为吗?如果是这样,有没有办法解决这个问题?我的目标是让我的整个 yaml 输出都是免费的。
【问题讨论】:
【参考方案1】:YAML
name:
键 name
没有字符串值;它实际上是一个空值。参见,例如,在线解析器here;规范的 YAML 表示是:
!!map
? !!str "name"
: !!null "null",
yaml-cpp 试图确保你告诉它的(“写这个空字符串”)是如何解析生成的 YAML,所以它把空字符串写成""
。
如果要写入空值,则要么不写入值,要么写入YAML::Null
。后者(我相信)会产生
name: ~
这是 null 的规范形式。
【讨论】:
啊,好的。我明白这背后的原因。话虽如此,我无法发出空值的核心问题仍然存在。如果我发出 nullout << YAML::Value << YAML::Null;
或流中没有发出任何内容 out << YAML::Value;
,我会遇到格式问题。
我可能说得太早了。看起来out << YAML::Value << YAML::Null;
确实打印出了 ~ 正如你所说的那样,它必须足以满足我的需要。 out << YAML::Value;
确实会导致奇怪的输出 yaml 格式问题。感谢您的帮助。以上是关于无法使用 yaml-cpp 发出空值的主要内容,如果未能解决你的问题,请参考以下文章