根据您提供的代码和输入,问题可能出现在对 JSON 数据进行遍历时。我注意到在迭代对象键值对时,您使用了 it.key()
来获取键的值,并且直接将其作为 YAML 键输出。然而,在 jsoncpp 库中,key()
方法返回一个 std::string
类型的键名称。
为了修复这个问题,您可以将 it.key()
替换为 it.key().asString()
,以确保正确地获取键名并将其转换为字符串类型。
以下是更新后的函数示例:
void jsonToYaml(const json& jsonData, YAML::Emitter& emitter)
{
if (jsonData.is_object())
{
emitter << YAML::BeginMap;
for (auto it = jsonData.begin(); it != jsonData.end(); ++it)
{
emitter << YAML::Key << it.key().asString();
if(it.value().is_object() || it.value().is_array())
jsonToYaml(it.value(), emitter);
else
emitter << YAML::Value << it.value();
}
emitter << YAML::EndMap;
}
else if (jsonData.is_array())
{
emitter << YAML::BeginSeq;
for (const auto& item : jsonData)
{
jsonToYaml(item, emitter);
}
emitter << YAML::EndSeq;
}
else
{
// Scalar value
emitter << jsonData.get<json::string_t>();
}
}
通过修改这一部分代码,你应该能够正确地将 JSON 转换为 YAML 格式。
内容由零声教学AI助手提供,问题来源于学员提问