我在我的项目中使用了rapidjson。我有一个方法,它解析一个json并返回它的一部分。
static rapidjson::Document getStructureInfo(std::string structureType)
{
rapidjson::Document d = getStructuresInfo();
rapidjson::Document out;
out.CopyFrom(d[structureType.c_str()], d.GetAllocator());
std::string title1 = out["title"].GetString();
return out;
}
然后,我用这个部分来得到它的值。
rapidjson::Document info = StructureManager::getStructureInfo(type);
title2=info["title"].GetString();
问题是title1是成功读取的,但是在document.h中的以下行中,title2面临访问冲突问题:
bool IsString() const { return (flags_ & kStringFlag) != 0; }
我想知道返回部分文档的正确方法是什么。(我不想用指针)。
谢谢
发布于 2015-12-17 17:51:43
要返回文档的一部分,只需返回Value
的(const)引用即可。
static rapidjson::Value& getStructureInfo(std::string structureType)
{
return d[structureType.c_str()];
}
rapidjson::Value& info = StructureManager::getStructureInfo(type);
title2=info["title"].GetString();
顺便说一下,您的原始代码中的问题是由于d.GetAllocator()
属于局部变量d
,当本地变量被销毁时,分配将变得无效。下面应该修复它,但是我推荐上面的解决方案,它使用引用来防止复制。
out.CopyFrom(d[structureType.c_str()], out.GetAllocator());
https://stackoverflow.com/questions/34313527
复制相似问题