【问题标题】:Deep copy of Poco::JSON::ObjectPoco::JSON::Object 的深拷贝
【发布时间】:2015-09-04 17:28:17
【问题描述】:

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

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

【问题讨论】:

  • makeStruct 函数似乎做了一个深拷贝,尽管这给你留下了一个 Poco::Dynamic::Struct 并且我没有看到任何盆栽函数将它转换回 Poco::JSON::Object 虽然你可以写一个 bsed来源makeStruct

标签: c++ poco-libraries


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    找不到好的文档。所以这是另一种复制方式。您可以检查键和值是否需要更深入的复制,例如使用 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 1970-01-01
      • 2021-01-07
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 2015-01-13
      • 2011-09-05
      相关资源
      最近更新 更多