2012-12-18 2 views
6

Mein Code wie folgt zu lesen:Wie eine JSON-Datei in eine C++ Zeichenfolge

std::istringstream file("res/date.json"); 
std::ostringstream tmp; 
tmp<<file.rdbuf(); 
std::string s = tmp.str(); 
std::cout<<s<<std::endl; 

Der Ausgang ist res/date.json, während das, was ich wirklich will, der gesamte Inhalt dieser JSON-Datei ist.

+2

Sie müssen die Datei öffnen, dann lesen Sie ihren Inhalt in eine 'std :: string'. –

+4

Sollte ifstream verwenden, nicht istringstream. – Kugel

+2

Verwenden Sie 'ifstream', nicht' istringstream'. –

Antwort

9

Diese

std::istringstream file("res/date.json"); 

erzeugt einen Strom (genannt file), die "res/date.json" aus dem String liest.

Diese

std::ifstream file("res/date.json"); 

erzeugt einen Strom (genannt file), die aus der Datei res/date.json Namen liest.

Den Unterschied sehen?

3

Ich fand später eine gute Lösung. Unter Verwendung von parser in fstream.

std::ifstream ifile("res/test.json"); 
Json::Reader reader; 
Json::Value root; 
if (ifile != NULL && reader.parse(ifile, root)) { 
    const Json::Value arrayDest = root["dest"]; 
    for (unsigned int i = 0; i < arrayDest.size(); i++) { 
     if (!arrayDest[i].isMember("name")) 
      continue; 
     std::string out; 
     out = arrayDest[i]["name"].asString(); 
     std::cout << out << "\n"; 
    } 
} 
+8

Wie kann ich den 'Json :: Reader' in meinem C++ Projekt haben? – STF

0

habe ich versucht, das Zeug oben, aber die Sache ist, dass sie C++ 14 für mich arbeitet in nicht: P Ich Zeug wie von ifstream incomplete type is not allowed auf beiden Antworten und 2 json11 :: Json keine ::Reader oder ein ::Value so Antwort 2 nicht funktioniert entweder ich dünn, um die answoer für pPL, die nutzen diese https://github.com/dropbox/json11 so etwas wie dies zu tun ist:

ifstream ifile; 
int fsize; 
char * inBuf; 
ifile.open(file, ifstream::in); 
ifile.seekg(0, ios::end); 
fsize = (int)ifile.tellg(); 
ifile.seekg(0, ios::beg); 
inBuf = new char[fsize]; 
ifile.read(inBuf, fsize); 
string WINDOW_NAMES = string(inBuf); 
ifile.close(); 
delete[] inBuf; 
Json my_json = Json::object { { "detectlist", WINDOW_NAMES } }; 
while(looping == true) { 
    for (auto s : Json::array(my_json)) { 
     //code here. 
    }; 
}; 

Hinweis: das ist in einer Schleife ist, wie ich es wollte Schleife die Daten. Hinweis: Es gibt sicherlich einige Fehler, aber zumindest habe ich die Datei im Gegensatz zu oben korrekt geöffnet.

Verwandte Themen