使用 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。
我在我的项目中使用 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。