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