Как прочитать файл JSON в строку c++

мой код такой:

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

выход res/date.json, в то время как то, что я действительно хочу, это все содержимое этого файла json.

3 ответов


этой

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

создает поток (с именем file), который читает из строки "res/date.json".

этой

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

создает поток (с именем file), которая считывает из файла с именем res/date.json.

видите разницу?


Я нашел хорошее решение позже. Используя parser на 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";
    }
}

Я пробовал вещи выше, но дело в том, что они не работают в C++ 14 для меня :P Я получаю такие вещи, как ifstream incomplete type is not allowedна обоих ответах и 2 json11:: Json не имеет ::Reader или ::Value Так что ответ 2 не работает либо я тонкий ответ для ppl, которые используют это https://github.com/dropbox/json11 сделать что-то вроде этого:

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.
    };
};

Примечание:то есть в цикле, как я хотел, чтобы он цикл данных. Примечание: там обязательно будут некоторые ошибки с этим, но на по крайней мере, я правильно открыл файл, в отличие от вышеуказанного.