2010-11-27 16 views
17

JSONCPP tiene un escritor, pero todo lo que parece hacer es obtener información del analizador y luego enviarla a una cadena o una secuencia. ¿Cómo hago para alterar o crear nuevos objetos, matrices, valores, cadenas, etc. y escribirlos en el archivo?JSONCPP Escribiendo en los archivos

Respuesta

9

AFAICT, crea objetos de tipo Json :: Value, que se ocupan de todos los tipos de datos JSON, y pasan el resultado a Json :: Writer (uno de sus tipos derivados, para ser específicos), o simplemente a una secuencia

ej .: para escribir una serie de tres números enteros en un archivo:

Json::Value vec(Json::arrayValue); 
vec.append(Json::Value(1)); 
vec.append(Json::Value(2)); 
vec.append(Json::Value(3)); 
std::cout << vec; 
+0

Pero quiero escribir en el fichero de .json. – Yelnats

+9

Luego use un 'ofstream' en lugar de' cout'. –

+0

Yelnats, luego canalícelo a un archivo en lugar de std :: cout. – TimZaman

3

En primer lugar, usted tiene que crear el JSON::Value deseada. Debería ver todos los constructores (first). Para crear las jerarquías necesarias, consulte append y las sobrecargas del operador []; hay sobrecargas para los arreglos indices y string keys para los objetos.

Una forma de volver a escribir el valor de JSON es usando StyledStreamWriter::write y ofstream.

Consulte la respuesta de cegprakash para saber cómo escribirlo.

+0

Sí, pensé en esto después de leer la respuesta de Marcelo. Funciona. – Yelnats

+0

@Yelnats, entonces, ¿por qué no lo marcan como una respuesta adecuada? –

+1

'StyledStreamWriter' está en desuso. Si necesita personalización, use ['StreamWriterBuilder'] (http://open-source-parsers.github.io/jsoncpp-docs/doxygen/class_json_1_1_stream_writer_builder.html). O simplemente sigue las otras respuestas aquí. – cdunn2001

35
#include<json/writer.h> 

Código:

Json::Value event; 
    Json::Value vec(Json::arrayValue); 
    vec.append(Json::Value(1)); 
    vec.append(Json::Value(2)); 
    vec.append(Json::Value(3)); 

    event["competitors"]["home"]["name"] = "Liverpool"; 
    event["competitors"]["away"]["code"] = 89223; 
    event["competitors"]["away"]["name"] = "Aston Villa"; 
    event["competitors"]["away"]["code"]=vec; 

    std::cout << event << std::endl; 

Salida:

{ 
     "competitors" : 
     { 
       "away" : 
       { 
         "code" : [ 1, 2, 3 ], 
         "name" : "Aston Villa" 
       }, 
       "home" : 
       { 
         "name" : "Liverpool" 
       } 
     } 
} 
+3

Esto se ve muy bien. ¿Qué hay de agregar clases, en lugar de int, con el método .append? – malber

7
#include <json.h> 
#include <iostream> 
#include <fstream> 

void main() 
{ 
    std::ofstream file_id; 
    op_file_id.open("file.txt"); 

    Json::Value value_obj; 
    //populate 'value_obj' with the objects, arrays etc. 

    Json::StyledWriter styledWriter; 
    file_id << styledWriter.write(value_obj); 

    file_id.close(); 
} 
+0

Es más fácil de entender si explica su respuesta y no solo el código postal. – SuperBiasedMan

Cuestiones relacionadas