2013-08-07 14 views
5

Ho bisogno di un codice di lavoro C++ per la lettura di documenti da file usando rapidjson: https://code.google.com/p/rapidjson/rapidjson: codice funzionante per leggere il documento dal file?

Nel wiki è ancora documentato, gli esempi unserialize solo da std :: string, io non ho una profonda conoscenza dei modelli.

ho serializzato mio documento in un file di testo e questo è il codice che ho scritto, ma non è così di compilazione:

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

lo stato di errore di compilazione: errore: 'Document' non è un membro di 'rapidjson'

sto usando Qt 4.8.1 con minGW e rapidjson v 0.1 (ho già provo con v aggiornato 0,11 ma l'errore rimango)

risposta

4

appena trovato questa domanda dopo aver avuto un prob piuttosto simile lem. La soluzione sarebbe quella di utilizzare un * oggetto file, e non un ifstream insieme proprio oggetto FileStream di rapidjson (già includere l'intestazione a destra)

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

È ovviamente necessario aggiungere le document.h includere (questo risponde la tua domanda diretta, ma non risolverà il problema nel tuo caso, dal momento che si sta utilizzando il flusso di file sbagliato):

#include "rapidjson/document.h" 

il documento oggetto è quindi (piuttosto veloce potrei aggiungere) riempito con il contenuto del file. Spero che sia d'aiuto!

11

FileStream nella risposta di @ Raanan è apparentemente deprecato. C'è un commento nel codice sorgente che dice di usare FileReadStream invece.

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

Si prega di leggere documenti in http://rapidjson.org/md_doc_stream.html.

+1

È stato chiesto 3 anni fa. Il wrapper Iostream è stato aggiunto un paio di mesi fa. –

Problemi correlati