我在项目中使用yaml-cpp来处理各种事情。现在我想把一些数据写成JSON。由于JSON是YAML的一个子集,至少对于我需要的功能,我理解应该可以在yaml-cpp中设置一些选项来输出纯JSON。怎么做的?
答案 0 :(得分:3)
yaml-cpp没有直接强制JSON兼容输出的方法,但您可以模拟它。
YAML:Emitter Emitter;
emitter << YAML:: DoubleQuoted << YAML::Flow << /* rest of code */;
答案 1 :(得分:1)
Jesse Beder 的回答似乎对我不起作用;我仍然使用 YAML 语法得到多行输出。但是,我发现通过在 << YAML::BeginSeq
之后立即添加 << YAML::Flow
,您可以使用 JSON 语法强制所有内容都在一行中结束。然后,您必须删除开头的 [
字符:
YAML::Emitter emitter;
emitter << YAML::DoubleQuoted << YAML::Flow << YAML::BeginSeq << node;
std::string json(emitter.c_str() + 1); // Remove beginning [ character
Here is a fully worked example。
不过,仍然存在一个主要问题:数字被引用,将它们转换为字符串。我不确定这是否是 YAML::DoubleQuoted
的故意行为;查看测试,我没有看到任何测试用例涵盖将 DoubleQuoted
应用于数字时会发生的情况。此问题已提交 here。