如何将补丁多级json与nlohmann库合并

时间:2019-12-18 11:14:28

标签: c++ json nlohmann-json

我有以下路径列表:"blabla/bleble/blibli", "blabla/blibli/bleble" 我已成功使用以下函数将其转换为:{"blabla":{"bleble":{"blibli":null}}}

nlohmann::json transform(std::pair<std::string, int> aaa){
    nlohmann::json pathJsoned = {};
    auto splitedPath = split(aaa.first, '/');
    nlohmann::json* bla = &pathJsoned;

    for(int i = 0; i < splitedPath.size(); i++){
        if( !bla->is_null() && bla->at(splitedPath[i].c_str()).is_object() ){
            if(i == splitedPath.size()-1){
                std::cout << i << " || " << splitedPath.size() << std::endl;
                pathJsoned[splitedPath[i].c_str()] = "FILE";
            }else{
                std::cout << i << " || " << splitedPath.size() << std::endl;
                pathJsoned[splitedPath[i].c_str()] = nlohmann::json();
            }
        }
        nlohmann::json* a = &bla->operator[](splitedPath[i].c_str());
        bla = a;
    }
    return pathJsoned;
}

但是现在我想将其合并,但它不起作用。 我尝试过:

nlohmann::json merge( const nlohmann::json &a, const nlohmann::json &b )
{
    nlohmann::json result = a.flatten();
    nlohmann::json tmp = b.flatten();
    for ( auto it = tmp.begin(); it != tmp.end(); ++it )
        result[it.key()] = it.value();
    return result.unflatten();
}

结果是无用的,就像合并没有做任何事情一样,我尝试了nlohmann :: json库的merge_patch方法,但完成了一半的工作:

{
    "blabla": {
        "bleble": {
            "blibli": null
        },
        "blibli": {}
    }
}

预期结果:

{
    "blabla": {
        "bleble": {
            "blibli": null
        },
        "blibli": {
            "bleble": null
        }
    }
}

您知道是否可以合并完整的json吗?

完整代码如下:https://pastebin.com/Qyc8EQN0

0 个答案:

没有答案