首页 > 解决方案 > 从方法返回 JsonDoc 作为引用

问题描述

我有以下方法给出一个 jsonDoc 作为参考

bool MyClass::jsonTest(rapidjson::Document & rjsonDoc)
{
    rjsonDoc.SetObject();
    rapidjson::Value val(rapidjson::kObjectType);
    val.AddMember("a", 1, rjsonDoc.GetAllocator());
    val.AddMember("b", 2, rjsonDoc.GetAllocator());
    val.AddMember("c", 3, rjsonDoc.GetAllocator());
    rjsonDoc.AddMember("Values", val, rjsonDoc.GetAllocator());

    //outputs the json into a file
    std::FILE* fp = fopen("outputjsonTest.json", "wb"); // non-Windows use "w"
    char writeBuffer[65536];
    rapidjson::FileWriteStream os(fp, writeBuffer, sizeof(writeBuffer));
    rapidjson::Writer<rapidjson::FileWriteStream> writer(os);
    rjsonDoc.Accept(writer);
    fclose(fp);

    return false;
}

上述方法在调用时将完美的 json 写入文件 outputjsonTest.json

但是在另一个类中调用该方法并将其写入文件时,

rapidjson::Document d;
CData_BisconaCtrl dMan;
dMan.jsonTest(d);
//outputs the json into a file
        std::FILE* fp = fopen("outputruntest.json", "wb"); // non-Windows use "w"
char writeBuffer[65536];
rapidjson::FileWriteStream os(fp, writeBuffer, sizeof(writeBuffer));
rapidjson::Writer<rapidjson::FileWriteStream> writer(os);
d.Accept(writer);
fclose(fp);

文件 outputruntest.json 原来是空白的。

看来我不能使用按引用传递样式从方法返回 jsonDocument 。还是我犯了一个错误?有可能以这种方式返回一个 jsonDocument 吗?

标签: c++jsonrapidjson

解决方案


我看不出你的所作所为有什么问题。此外,我尝试运行您的代码,它似乎对我有用。

也就是说,您应该注意,如果您尝试Writer多次使用 (例如,打印多个文档或第二次打印同一个文档),您Reset()首先需要它。它将在第一个文档的末尾停止生成输出,因此如果您尝试打印第二个文档,它将不会产生任何输出(因为结果不会是合法的 JSON“文档”)。

[编辑:] 尽管如此,您可以尝试询问它以查看其中的内容,而不是将对象转储到文件中。检查其类型、尺寸、容量;查看它是否具有预期的成员,或迭代其成员/条目;等等。失败了,我会尝试证明基本的 C++ 东西是有效的。(即:实际上是否调用了正确的方法?是否正在处理任何意外异常?该方法是否接收您正在发送的对象?等等。)

祝你好运!


推荐阅读