Poco::JSON::Object的深度拷贝

Deep copy of Poco::JSON::Object

本文关键字:深度 拷贝 Object JSON Poco      更新时间:2023-10-16

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

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

我不知道有什么通用的解决方案,但是对于性能不重要的小型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;
    }
}

找不到好的文档。这是另一种复制方法。您可以使用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;
}