Я хочу создать сообщение JSON в C ++, используя RapidJson.Итак, в конце я хочу что-то вроде:
{"path" : [
{"position" : {
"x" : "4",
"y" : "3"
},
"orientation" : {
"x" : "1"
}},
{"position" : {
"x" : "4",
"y" : "3"
},
"orientation" : {
"x" : "1"
}}
]
}
Для того, чтобы сделать это в C ++, я написал такой код:
rapidjson::Document::AllocatorType& allocator = fromScratch.GetAllocator();
std::string ret = "{\"path\" :\" [\"";
for(int i = 0; i<srv.response.plan.poses.size(); i++)
{
float x = srv.response.plan.poses[i].pose.position.x;
float y = srv.response.plan.poses[i].pose.position.y;
float th = srv.response.plan.poses[i].pose.orientation.x;
std::string pos = "{position:{x:" + std::to_string(x) + ",y:" + std::to_string(y) + "},";
std::string orient = "{orientation:{x:" + std::to_string(th) + "}}";
fromScratch.AddMember("position", pos, allocator);
fromScratch.AddMember("orientation", orient, allocator);
ret += fromScratch["posiiton"].GetString();
ret += fromScratch["orientation"].GetString();
if (i+1 < srv.response.plan.poses.size()) ret += "\",";
fromScratch.RemoveMember("position");
fromScratch.RemoveMember("orientation");
}
ret += "]\" }\"";
По сути, srv.response.plan.poses - это просто массив, состоящий из poses, где poses состоит из позиции и ориентации, а position имеет x и y (оба с плавающей точкой), то же самое с ориентацией (только x)
Как вы можете видеть, я преобразовал их в строкии попытался добавить участника с использованием rapidjson, но я получаю эту ошибку:
error: no matching function for call to ‘rapidjson::GenericValue<rapidjson::UTF8<> >::GenericValue(std::__cxx11::basic_string<char>&)’
GenericValue v(value);