Как читать несколько объектов json, используя jsoncpp

У меня есть образец файла «sample.json», который содержит 3 объекта JSON

{ «А»: «something1», «В»: «something2», «С»: «something3», «Д»: «something4»} { «А»: «something5», «В»: «something6», «С»: «something7», «Д»: «something8»} { «А»: «something9», «В»: «something10», «С»: «something11», «Д»: «something12»}

(нет новой строки в вышеуказанном файле)

Я хочу прочитать все три объекта json, используя jsoncpp.

Я могу прочитать первый объект, но не после него.

Вот соответствующая часть моего кода

    Json::Value root;   // will contains the root value after parsing.
Json::Reader reader;
std::ifstream test("sample.json", std::ifstream::binary);
bool parsingSuccessful = reader.parse(test, root, false);
int N = 3;
if (parsingSuccessful)
{
for (size_t i = 0; i < N; i++)
{
std::string A= root.get("A", "ASCII").asString();
std::string B= root.get("B", "ASCII").asString();
std::string C= root.get("C", "ASCII").asString();
std::string D= root.get("D", "ASCII").asString();
//print all of them
}
}

4

Решение

Я считаю, что ваш файл JSON синтаксически неверен. Увидеть www.json.org. Ваш файл должен содержать один объект или же массив, например в вашем случае это должно выглядеть так:

[{"A":"something1","B":"something2","C":"something3","D":"something4"},
{"A":"something5","B":"something6","C":"something7","D":"something8"},
{"A":"something9","B":"something10","C":"something11","D":"something12"}]

Затем вы можете получить доступ к каждому объекту массива в вашем цикле:

for (size_t i = 0; i < root.size(); i++)
{
std::string A = root[i].get("A", "ASCII").asString();
// etc.
}
6

Другие решения

Вот решение вопроса, притворяясь там являются переводы строк между каждым объектом (и ни одна строка не является пустой или искаженной):

// Very simple jsoncpp test
#include <json/json.h>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
Json::Value root;
Json::Reader reader;
ifstream test("sample.json", ifstream::binary);
string cur_line;
bool success;

do {
getline(test, cur_line);
cout << "Parse line: " << cur_line;
success = reader.parse(cur_line, root, false);
cout << root << endl;
} while (success);

cout << "Done" << endl;
}
1

По вопросам рекламы [email protected]