c ++ rapidjson返回值

时间:2015-12-16 13:38:02

标签: c++ rapidjson

我在我的项目中使用了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已成功读取,但title2面临document.h中以下行的访问冲突问题:

bool IsString() const { return (flags_ & kStringFlag) != 0; }

我想知道返回部分文档的正确方法是什么。 (我不想使用指针)。

由于

1 个答案:

答案 0 :(得分:3)

要返回文档的一部分,您只需返回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());