c++ - 从方法返回 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 吗?
解决方案
我看不出你的所作所为有什么问题。此外,我尝试运行您的代码,它似乎对我有用。
也就是说,您应该注意,如果您尝试Writer
多次使用 (例如,打印多个文档或第二次打印同一个文档),您Reset()
首先需要它。它将在第一个文档的末尾停止生成输出,因此如果您尝试打印第二个文档,它将不会产生任何输出(因为结果不会是合法的 JSON“文档”)。
[编辑:] 尽管如此,您可以尝试询问它以查看其中的内容,而不是将对象转储到文件中。检查其类型、尺寸、容量;查看它是否具有预期的成员,或迭代其成员/条目;等等。失败了,我会尝试证明基本的 C++ 东西是有效的。(即:实际上是否调用了正确的方法?是否正在处理任何意外异常?该方法是否接收您正在发送的对象?等等。)
祝你好运!
推荐阅读
- javascript - 无法创建许多模态
- ios - 在 2 个部分 Tableview 中分离 Realm Bool 数据
- java - 我们可以将父项目中定义的用户定义类用于子项目maven吗?
- rabbitmq - 如何使用 MassTransit 和 RabbitMQ 设置消费者优先级
- javascript - 为什么使用 mongoose 删除 mongodb 集合中的数据后集合模式的长度没有改变?
- haskell - Haskell Attoparsec 无限循环
- toolkit - 使用 Holotoolkit 滑块的值
- android - Android ImageView程序,如何根据随机函数设置imageview
- c - 我的最终功能不会返回
- xcode - 没有故事板的编码