2015-09-04 77 views
2

我试图创建Poco::JSON::Object的深拷贝。Poco :: JSON的深拷贝::对象

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

+0

的'makeStruct'功能似乎做一个深拷贝,尽管这给你留下一个'波科::动态:: Struct'和我没有看到任何盆栽功能转换回'波科:: JSON :: Object',尽管你可以在'makeStruct'的源代码中写入一个 –

回答

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; 
    } 
} 
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; 
}