Мне нужен рабочий код C ++ для чтения документа из файла с использованием rapidjson: https://code.google.com/p/rapidjson/
В вики это еще не документировано, примеры десериализуются только из 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);
состояние ошибки компиляции: ошибка: «Документ» не является членом «rapidjson»
Я использую Qt 4.8.1 с mingw и rapidjson v 0.1 (я уже пробовал с обновленным v 0.11, но ошибка остается)
FileStream
в @ Raanan ответ явно устарел. Там есть комментарий в исходном коде, который говорит, что использовать 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);
#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 .
Просто нашел этот вопрос после довольно похожей проблемы. Решение было бы использовать объект FILE *, а не ifstream вместе с собственным объектом FileStream quickjson (вы уже включили правильный заголовок)
FILE * pFile = fopen ("test.json" , "r");
rapidjson::FileStream is(pFile);
rapidjson::Document document;
document.ParseStream<0>(is);
Вам, конечно, нужно добавить файл document.h (он отвечает на ваш прямой вопрос, но не решит проблему в вашем случае, так как вы используете неправильный файловый поток):
#include "rapidjson/document.h"
Затем объект документа (довольно быстро, я бы добавил) заполняется содержимым файла. Надеюсь, поможет!