我有以下方法,可以给出一个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是可能的吗?
发布于 2019-02-20 06:55:19
我看不出你的所作所为有什么问题。此外,我尝试运行您的代码,它似乎对我有效。
也就是说,您应该注意到,如果您尝试多次使用Writer (例如,打印多个文档或再次打印同一文档),则需要首先对其执行Reset()操作。它将在第一个文档的末尾停止生成输出,因此如果您尝试打印第二个文档,它将不会生成任何输出(因为结果将不是合法的JSON“文档”)。
编辑:尽管如此,您可以尝试询问对象以查看其中的内容,而不是将对象转储到文件中。检查它的类型、大小、容量;看看它是否有预期的成员,或者迭代它的成员/条目;等等。如果所有这些都做不到,我会尝试证明基本的C++工作正常。(即:实际调用的方法是否正确?是否存在正在处理的意外异常?该方法是否正在接收您要发送的对象?等)
祝好运!
https://stackoverflow.com/questions/54767557
复制相似问题