【发布时间】:2017-10-09 17:16:47
【问题描述】:
我在我的项目中使用 yaml-cpp 来处理各种事情。现在我想把一些数据写成 JSON。由于 JSON 是 YAML 的子集,至少对于我需要的功能,我理解应该可以在 yaml-cpp 中设置一些选项来输出纯 JSON。这是怎么做到的?
【问题讨论】:
我在我的项目中使用 yaml-cpp 来处理各种事情。现在我想把一些数据写成 JSON。由于 JSON 是 YAML 的子集,至少对于我需要的功能,我理解应该可以在 yaml-cpp 中设置一些选项来输出纯 JSON。这是怎么做到的?
【问题讨论】:
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 兼容的方法,但您可以模拟它。
YAML:Emitter Emitter;
emitter << YAML:: DoubleQuoted << YAML::Flow << /* rest of code */;
【讨论】:
null 的方法