【问题标题】:Unable to clone a JSON Array properly using C++ Poco library无法使用 C++ Poco 库正确克隆 JSON 数组
【发布时间】:2020-06-04 14:21:28
【问题描述】:

我想克隆 json 对象。 为了完成这项工作,我开发了两个功能。一个用于对象,一个用于数组。

克隆 JSON::Object::Ptr 的方法效果很好。 这是代码

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

    return ptr;
}

克隆 JSON::Array::Ptr 的方法有效,但是当我对包含数组的对象进行字符串化时,出现以下错误:

Can not convert to std::string

这里是克隆无效数组的函数代码

Poco::JSON::Array::Ptr CJsonHelper::cloneJson(Poco::JSON::Array::Ptr obj)
{
    Poco::JSON::Array::Ptr copy = new Poco::JSON::Array;
    // loop and copy
    for (auto item = obj->begin(); item != obj->end(); ++item)
    {
        copy->add(item);
    }

    return copy;
}

传递给函数的对象是预先从失败中解析出来的并且是有效的

{
  "items" : [
  {
    "name" : "object0",
    "position" : {
      "x" : "700.0",
      "y" : "0.0",
      "z" : "250.0"
    } 
  }
  ]
}

如果我替换了

copy->add(item);

copy->add(item->extract<Poco::JSON::Object::Ptr>());

它运行良好,但仅在这种情况下,我需要它是通用的。

我确定我错过了一些我没有找到的东西,因为它在克隆对象方法中运行良好。

【问题讨论】:

    标签: c++ json poco-libraries


    【解决方案1】:

    我终于找到了我的错误!

    我错过了一个通过自动迭代器的 *

    copy->add(item);
    

    变成

    copy->add(*item);
    

    如果它可以帮助某人,我会发布更新的功能

    Poco::JSON::Array::Ptr CJsonHelper::cloneJson(Poco::JSON::Array::Ptr obj)
    {
        Poco::JSON::Array::Ptr copy = new Poco::JSON::Array;
        // loop and copy
        for (auto item = obj->begin(); item != obj->end(); ++item)
        {
            copy->add(*item);
        }
    
        return copy;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-27
      • 2013-03-01
      • 2020-05-11
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      相关资源
      最近更新 更多