无法使用 Poco 库正确克隆 JSON 数组C++

Unable to clone a JSON Array properly using C++ Poco library

本文关键字:JSON 数组 C++ Poco      更新时间:2023-10-16

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

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

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::P tr 的方法有效,但是当我字符串化包含数组的对象时,出现以下错误:

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

传递给函数的对象是从 faile 解析而来的,并且有效

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

在克隆方法中,如果我替换

copy->add(item);

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

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

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

我终于发现了我的错误!

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

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