如何将带有前导零的数字字符串转储为yaml-cpp中的有效yaml字符串?

时间:2019-02-22 05:28:29

标签: yaml-cpp

使用yaml-cpp中的引号不会转义使用前导零创建yaml字符串。因此,将字符串写入texfile并不是有效的yaml-string。{yao 1.2根据规范leading_zeros: 00005为5(请尝试:http://www.yamllint.com/

YAML::Node node;
node["leading_zeros"] = "00005";
std::cout << YAML::Dump(node)<<std::endl;
// output: leading_zeros: 00005
// instead of:leading_zeros: "00005"

如何使yaml-cpp转义以零开头的字符串?因此,不会从其他Yaml解析器解释为整数吗?

手动逃避似乎不是正确的答案。

node["leading_zeros"] = "\"00005\"";

更新: 数字值存储在YAML :: Node中!我很确定这是一个错误。

2 个答案:

答案 0 :(得分:0)

在分析代码上花费了一些时间后,我转到了这个 hacky 解决方案:https://github.com/nikich340/yaml-cpp/commit/468e0832b39c8320faa7c925708b76f6a3b1b840 它将在所有标量周围保存双引号(或者您可以将emitte manip 更改为单引号),这些标量最初是带引号的字符串。

答案 1 :(得分:-1)

直接使用YAML::Emitter

YAML::Emitter out;
out << YAML::BeginMap;
out << YAML::Key << "leading_zeroes" << YAML::Value;
out << YAML::Value << YAML::DoubleQuoted << "00005";
out << YAML::EndMap;