首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从方法返回JsonDoc作为引用

从方法返回JsonDoc作为引用
EN

Stack Overflow用户
提问于 2019-02-19 21:35:47
回答 1查看 88关注 0票数 0

我有以下方法,可以给出一个jsonDoc作为引用

代码语言:javascript
复制
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中

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

代码语言:javascript
复制
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是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2019-02-20 06:55:19

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

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

编辑:尽管如此,您可以尝试询问对象以查看其中的内容,而不是将对象转储到文件中。检查它的类型、大小、容量;看看它是否有预期的成员,或者迭代它的成员/条目;等等。如果所有这些都做不到,我会尝试证明基本的C++工作正常。(即:实际调用的方法是否正确?是否存在正在处理的意外异常?该方法是否正在接收您要发送的对象?等)

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54767557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档