使用 yaml-cpp 发出 JSON?

Emitting JSON with yaml-cpp?

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

yaml-cpp 没有直接强制 JSON 兼容输出的方法,但您可以模拟它。

YAML:Emitter Emitter;
emitter << YAML:: DoubleQuoted << YAML::Flow << /* rest of code */;

Jesse Beder的回答似乎对我不起作用;我仍然使用 YAML 语法得到多行输出。但是,我发现通过在 << YAML::Flow 之后立即添加 << YAML::BeginSeq,您可以强制所有内容以 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