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.