TEORÍA
Los Property Trees (ptree) de la biblioteca Boost para C++ nos permitirán crear dinámicamente estructuras de datos (similares a un mapa) que sean fácilmente serializables a XML, JSON, INI e INFO.
PRÁCTICA
POBLACIÓN
Añadir nodos al «ptree» es común, la serialización a un tipo u otro de formato será lo que difiera.
En los ejemplos se muestra cómo quedaría el resultado en JSON pero la idea es la misma para los demás formatos.
#include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/ptree.hpp>
using namespace std;
using namespace boost::property_tree;
//...
ptree nodoPadre;
// AÑADIR UN HIJO CON CLAVE ÚNICA
valor = 1; //tipos básicos
nodoPadre.put("clave", valor);
// AÑADIR UN SUBNODO PTREE
ptree nodoHijo;
nodoPadre.add_child("nodoHijo", nodoHijo);
// AÑADIR UN ARRAY DE ELEMENTOS/NODOS
ptree pt;
ptree children;
ptree child1, child2, child3;
child1.put("", 1);
child2.put("", 2);
child3.put("", 3);
// El primer valor de "make_pair" debe ser la
// cadena vacía o sino, el array será interpretado
// como un objeto JSON en lugar de un array
children.push_back(std::make_pair("", child1));
children.push_back(std::make_pair("", child2));
children.push_back(std::make_pair("", child3));
pt.add_child("MyArray", children);
/*
result:
{
"MyArray":
[
"1",
"2",
"3"
]
}
*/
// Si el primer valor no es la cadena vacía
children.push_back(std::make_pair("1", child1));
children.push_back(std::make_pair("2", child2));
children.push_back(std::make_pair("3", child3));
/*
result:
{
"MyArray":
{
"1": "1",
"2": "2",
"3": "3"
}
}
*/
// NOTA: Si el array está vacío, se le asigna una cadena vacía
ptree ptVacio;
pt.add_child("MyArray", ptVacio);
/*
result:
{
"MyArray": ""
}
*/
SERIALIZACIÓN
JSON
// SERIALIZAR A JSON #include <boost/property_tree/json_parser.hpp> ptree mi_ptree; ostringstream buf; write_json(buf, mi_ptree, false); string jsonSerializado = buf.str();
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.