2013-08-07 13 views
5

Ich brauche einen Arbeits C++ Code für Dokument aus einer Datei mit rapidjson Lesen: https://code.google.com/p/rapidjson/rapidjson: Arbeitscode zum Lesen von Dokumenten aus einer Datei?

Im Wiki es noch nicht dokumentiert, unserialize die Beispiele nur aus std :: string, ich habe nicht ein tiefes Wissen über Vorlagen.

serialisiert ich mein Dokument in eine Textdatei und das ist der Code, den ich geschrieben habe, aber es funktioniert nicht Kompilierung:

#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); 

der Kompilierung Fehlerzustand: Fehler: ‚Dokument‘ ist kein Mitglied von 'rapidjson'

I Qt 4.8.1 mit mingw und rapidjson v 0.1 (ich schon versuchen, mit Upgrade v 0.11, aber der Fehler bleibt)

Antwort

4

gefunden Genau diese Frage nach einem ziemlich ähnlichen prob mit bin mit lem. Die Lösung wäre ein FILE * Objekt zu verwenden, und nicht ein ifstream zusammen mit rapidjson eigenen Filestream-Objekt (Sie enthalten bereits die richtigen Header)

FILE * pFile = fopen ("test.json" , "r"); 
rapidjson::FileStream is(pFile); 
rapidjson::Document document; 
document.ParseStream<0>(is); 

Sie natürlich die document.h hinzufügen müssen enthalten (diese Antworten Ihre direkte Frage, sondern wird das Problem in Ihrem Fall nicht lösen, da Sie den falschen Datei-Stream verwenden):

#include "rapidjson/document.h" 

die Dokument-Objekt ist dann (ziemlich schnell i mit dem Dateiinhalt gefüllt hinzufügen möchte). Ich hoffe es hilft!

11

Die FileStream in @ Raanans Antwort ist offenbar veraltet. Es gibt einen Kommentar im Quellcode, der besagt, stattdessen FileReadStream zu verwenden.

#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); 
7
#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); 

Bitte docs in http://rapidjson.org/md_doc_stream.html lesen.

+1

Es wurde vor 3 Jahren gefragt. Iostream Wrapper wurde vor ein paar Monaten hinzugefügt. –