serialize libreria example c++ json jsoncpp

c++ - libreria - jsoncpp example



JSONCPP Escribiendo en archivos (5)

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


En AFAICT, crea objetos de tipo Json :: Value, que abastece a todos los tipos de datos JSON, y pasa el resultado a un Json :: Writer (uno de sus tipos derivados, para ser específico), o simplemente a una secuencia.

Ej .: para escribir una matriz de tres 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;


Primero, tienes que crear el JSON::Value deseado. Debes mirar a todos los constructores ( first ). Para crear las jerarquías necesarias, vea el append y el operador [] sobrecargas; hay sobrecargas para los indices matriz y las claves de cadena para los objetos.

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

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


Json::StyledWriter está en desuso, puede usar Json::StreamWriterBuilder para escribir json en archivos.

Json::Value rootJsonValue; rootJsonValue["foo"] = "bar"; Json::StreamWriterBuilder builder; builder["commentStyle"] = "None"; builder["indentation"] = " "; std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter()); std::ofstream outputFileStream("/tmp/test.json"); writer -> write(rootJsonValue, &outputFileStream);

El json se escribirá en /tmp/test.json .

$ cat /tmp/test.json { "foo" : "bar" }


#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(); }


#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" } } }