用yaml-cpp发送JSON?

时间:2017-05-10 21:21:02

标签: json yaml yaml-cpp

我在项目中使用yaml-cpp来处理各种事情。现在我想把一些数据写成JSON。由于JSON是YAML的一个子集,至少对于我需要的功能,我理解应该可以在yaml-cpp中设置一些选项来输出纯JSON。怎么做的?

2 个答案:

答案 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