Poco :: JSON :: Object的深层副本

时间:2015-09-04 17:28:18

标签: c++ poco-libraries

我正在尝试创建Poco::JSON::Object的深层副本。

内部Poco::JSON::Object使用指针和复制构造函数只复制那些指针。有一个聪明的解决方案如何使用Poco框架复制此结构?

2 个答案:

答案 0 :(得分:3)

我不知道任何通用解决方案,但对于性能不重要的小型JSON对象,以下功能可以很好地完成工作:

Poco::JSON::Object::Ptr cloneJsonObject(Poco::JSON::Object::Ptr obj) {
    if (obj) {
        std::stringstream streamedObj;
        obj->stringify(streamedObj);
        Poco::JSON::Parser parser;
        return parser.parse(streamedObj).extract<Poco::JSON::Object::Ptr>();
    } else {
        return nullptr;
    }
}

答案 1 :(得分:0)

无法找到好的文档。所以这是另一种复制方式。您可以检查密钥和值是否需要进一步更深层次的复制,如使用c_str()。对我来说这很好。

Poco::JSON::Object::Ptr cloneJsonObject(Poco::JSON::Object::Ptr obj)
{
    Poco::JSON::Object::Iterator it;
    Poco::JSON::Object *ptr = new Poco::JSON::Object;
    // loop and copy
    for(it = obj->begin(); it != obj->end(); it++)
        ptr->set(it->first, it->second);

    return ptr;
}