Estoy haciendo un código donde tengo que usar rapidjson para obtener los valores json

Primero recupero la información del archivo

   ifstream  myReadFile;
    myReadFile.open("results.txt");
    string output;
    if (myReadFile.is_open()) {
        while (!myReadFile.eof()) {
            myReadFile >> output;
        }
    }
    myReadFile.close();

Ejemplo de results.txt:

[{"ID":1,"Name":"SomeName","Description":"Pub"}]

Y luego uso rapidjson para filtrar la información,

const char * json = output.c_str();
Document document;
document.Parse(json);
cout << document["ID"].GetInt();  //Error on the line
cout << document["Name"].GetString());

Pero recibo este error: ¡Error de depuración! abort () ha sido llamado

¿Ideas?

Gracias por su tiempo

0
Tazz 15 ene. 2017 a las 06:05
 – 
melpomene
15 ene. 2017 a las 06:10
Después de ver esa publicación, probé esas líneas: "while (myReadFile >> output) {" y "while (! (MyReadFile >> std :: ws) .eof ()) {", ninguna parece funcionar @melpomene
 – 
Tazz
15 ene. 2017 a las 06:28

1 respuesta

La mejor respuesta

¡Su json es una matriz pero está tratando de analizarlo ya que no lo era!

Elimine los corchetes de la cadena json y luego su código debería funcionar o analizar la matriz:

for (SizeType i = 0; i<document.Size(); i++)
{
    const rapidjson::Value &data_vec = document[i];
    int id = data_vec["ID"].GetInt();
    std::string name = data_vec["Name"].GetString();
}
0
doqtor 15 ene. 2017 a las 12:00
Gracias por su tiempo y su explicación, su respuesta resolvió mi problema, ¡así que la aceptaré como la respuesta correcta! :)
 – 
Tazz
15 ene. 2017 a las 17:21