Trabajo con YAML en C++: biblioteca yaml-cpp
YAML (YAML Ain't Markup Language) es un formato de serialización de datos legible por humanos que se utiliza a menudo para archivos de configuración, intercambio de datos y almacenamiento de información estructurada. En C++, existe una biblioteca potente y fácil de usar llamada yaml-cpp para trabajar con YAML. En este artículo, veremos en detalle cómo instalar, configurar y usar yaml-cpp para analizar y crear documentos YAML.
Instalación de yaml-cpp
La biblioteca yaml-cpp está disponible para la mayoría de las plataformas. La forma más sencilla de instalarla es a través del gestor de paquetes:
- Ubuntu/Debian:
sudo apt-get install libyaml-cpp-dev - macOS (Homebrew):
brew install yaml-cpp - Windows (vcpkg):
vcpkg install yaml-cpp
También se puede compilar desde el código fuente, descargando el repositorio de GitHub y usando CMake:
git clone https://github.com/jbeder/yaml-cpp.gitcd yaml-cppmkdir build && cd buildcmake ..makesudo make installFundamentos del trabajo con yaml-cpp
La biblioteca proporciona una API intuitiva para cargar, modificar y guardar datos YAML. Todos los tipos de datos se almacenan en el contenedor YAML::Node, que puede ser un escalar, una secuencia (arreglo) o un mapeo (diccionario).
Ejemplo de archivo YAML
Considere el siguiente archivo de configuración config.yaml:
database: host: localhost port: 5432 name: myapp credentials: user: admin password: secret123
server: workers: 4 timeout: 30.5 debug: true
allowed_ips: - 192.168.0.1 - 192.168.0.2 - 10.0.0.1Análisis de un archivo YAML
Para cargar datos desde un archivo, se utiliza la función YAML::LoadFile():
#include <yaml-cpp/yaml.h>#include <iostream>#include <string>#include <vector>
int main() { try { // Cargamos el archivo YAML YAML::Node config = YAML::LoadFile("config.yaml");
// Acceso a datos anidados mediante el operador [] std::string host = config["database"]["host"].as<std::string>(); int port = config["database"]["port"].as<int>(); std::string user = config["database"]["credentials"]["user"].as<std::string>();
std::cout << "Database host: " << host << std::endl; std::cout << "Database port: " << port << std::endl; std::cout << "User: " << user << std::endl;
// Trabajo con secuencias (listas) YAML::Node ips = config["allowed_ips"]; std::vector<std::string> ipList; for (const auto& ip : ips) { ipList.push_back(ip.as<std::string>()); }
std::cout << "Allowed IPs: "; for (const auto& ip : ipList) { std::cout << ip << " "; } std::cout << std::endl;
} catch (const YAML::Exception& e) { std::cerr << "YAML Error: " << e.what() << std::endl; return 1; }
return 0;}Creación y serialización de YAML
yaml-cpp también permite crear documentos YAML mediante programación y guardarlos en un archivo:
#include <yaml-cpp/yaml.h>#include <fstream>
int main() { // Creamos el nodo raíz YAML::Node config;
// Agregamos datos config["application"]["name"] = "MyApp"; config["application"]["version"] = 2.1; config["application"]["debug"] = false;
// Creamos una secuencia config["features"].push_back("logging"); config["features"].push_back("caching"); config["features"].push_back("auth");
// Vuel También en la biblioteca
Uso de GraphQL en Swift: bibliotecas Apollo y Relay para iOS/macOS
Bean Validation (Jakarta Validation) — Validación de datos en Java
Autorización y autenticación en TypeScript: guía completa
PHPMailer para PHP: guía completa con ejemplos
Generación de PDF en TypeScript: bibliotecas y herramientas para Node.js