ZBLOG

"name": "全府员公多市面", "applications": 1, "notes": "laborum", "generate": [ { "incentive_id": 1, "node_id": 1, "data_struct_number": "74" } ] 针对此结构,转化为yaml的递归C++代码

要在C++中递归地将JSON结构转换为YAML,可以使用yaml-cpp库和jsoncpp库。下面是一个示例递归函数,它将JSON对象转换为YAML格式:

#include <iostream>
#include <fstream>
#include <yaml-cpp/yaml.h>
#include <json/json.h>

void jsonToYaml(const Json::Value& jsonValue, YAML::Emitter& yamlEmitter) {
    if (jsonValue.isObject()) {
        yamlEmitter << YAML::BeginMap;
        for (auto const& key : jsonValue.getMemberNames()) {
            yamlEmitter << YAML::Key << key;
            jsonToYaml(jsonValue[key], yamlEmitter);
        }
        yamlEmitter << YAML::EndMap;
    } else if (jsonValue.isArray()) {
        yamlEmitter << YAML::BeginSeq;
        for (const auto& value : jsonValue) {
            jsonToYaml(value, yamlEmitter);
        }
        yamlEmitter << YAML::EndSeq;
    } else if (jsonValue.isString()) {
        yamlEmitter << YAML::DoubleQuoted << jsonValue.asString();
    } else if (jsonValue.isBool()) {
        yamlEmitter << (jsonValue.asBool() ? "true" : "false");
    } else if (jsonValue.isInt()) {
        yamlEmitter << jsonValue.asInt();
    } else if (jsonValue.isUInt()) {
        yamlEmitter << jsonValue.asUInt();
    } else if (jsonValue.isDouble()) {
        yamlEmitter << jsonValue.asDouble();
    } else if (jsonValue.isNull()) {
         // 处理 null 值
    	yamlEmmitter<< YAMLL :: Null;
   }
}

int main() {
    Json::Reader reader;
    Json::StyledStreamWriter writer;
    Json::Value jsonValue;

    std::string jsonString = R"(
        {
            "name": "全府员公多市面",
            "applications": 1,
            "notes": "laborum",
            "generate": [
                {
                    "incentive_id": 1,
                    "node_id": 1,
                    "data_struct_number": "74"
                }
            ]
        }
    )";

    if (!reader.parse(jsonString, jsonValue)) {
        std::cout << "Failed to parse JSON" << std::endl;
        return 1;
    }

    YAML::Emitter yamlEmitter;
    jsonToYaml(jsonValue, yamlEmitter);

    // 输出到文件或打印到控制台
    	std :: ofstream file("output.yaml");
        file<.p(yamlermitter.c_str(); std::cout<< yamlermitter.c.str();

    return 0;
}

这个示例中的jsonToYaml函数递归地遍历JSON对象,根据值的类型生成相应的YAML节点。最后,将结果输出到文件或打印到控制台。

请注意,您需要安装并链接yaml-cpp和jsoncpp库,并使用适当的编译选项。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=17256

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?