我需要一个有效的c ++代码,用于使用rapidjson:https://code.google.com/p/rapidjson/
从文件中读取文档在wiki中它尚未记录,示例仅从std :: string反序列化,我对模板知之甚少。
我将文档序列化为文本文件,这是我编写的代码,但事实并非如此 编译:
#include "rapidjson/prettywriter.h" // for stringify JSON
#include "rapidjson/writer.h" // for stringify JSON
#include "rapidjson/filestream.h" // wrapper of C stream for prettywriter as output
[...]
std::ifstream myfile ("c:\\statdata.txt");
rapidjson::Document document;
document.ParseStream<0>(myfile);
编译错误状态:错误:'Document'不是'rapidjson'的成员
我正在使用Qt 4.8.1和mingw以及rapidjson v 0.1(我已经尝试升级版v 0.11,但错误仍然存在)
答案 0 :(得分:14)
@ Raanan的答案中的FileStream
显然已被弃用。在源代码中有一条评论说明要使用FileReadStream
。
#include <rapidjson/document.h>
#include <rapidjson/filereadstream.h>
using namespace rapidjson;
// ...
FILE* pFile = fopen(fileName.c_str(), "rb");
char buffer[65536];
FileReadStream is(pFile, buffer, sizeof(buffer));
Document document;
document.ParseStream<0, UTF8<>, FileReadStream>(is);
答案 1 :(得分:11)
#include <rapidjson/document.h>
#include <rapidjson/istreamwrapper.h>
#include <fstream>
using namespace rapidjson;
using namespace std;
ifstream ifs("test.json");
IStreamWrapper isw(ifs);
Document d;
d.ParseStream(isw);
答案 2 :(得分:6)
在遇到类似问题之后才发现这个问题。解决方案是使用FILE *对象,而不是ifstream和rapidjson自己的FileStream对象(你已经包含了正确的标题)
FILE * pFile = fopen ("test.json" , "r");
rapidjson::FileStream is(pFile);
rapidjson::Document document;
document.ParseStream<0>(is);
您当然需要添加document.h include(这会回答您的直接问题,但在您的情况下无法解决问题,因为您使用了错误的文件流):
#include "rapidjson/document.h"
然后文档对象(我可能会加快)填充文件内容。希望它有所帮助!