rapidjson:从文件中读取文档的工作代码?

时间:2013-08-07 15:09:40

标签: c++ templates rapidjson

我需要一个有效的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,但错误仍然存​​在)

3 个答案:

答案 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);

请阅读http://rapidjson.org/md_doc_stream.html中的文档。

答案 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"

然后文档对象(我可能会加快)填充文件内容。希望它有所帮助!