Trabalhando com YAML em C++: biblioteca yaml-cpp para parsing e serialização

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com YAML em C++: biblioteca yaml-cpp



YAML (YAML Ain't Markup Language) é um formato de serialização de dados legível por humanos, frequentemente usado para arquivos de configuração, troca de dados e armazenamento de informações estruturadas. Em C++, existe uma biblioteca poderosa e fácil de usar para trabalhar com YAML: yaml-cpp. Neste artigo, veremos detalhadamente como instalar, configurar e usar yaml-cpp para fazer parsing e criar documentos YAML.



Instalação do yaml-cpp



A biblioteca yaml-cpp está disponível para a maioria das plataformas. A maneira mais simples de instalá-la é através do gerenciador de pacotes:



  • Ubuntu/Debian: sudo apt-get install libyaml-cpp-dev
  • macOS (Homebrew): brew install yaml-cpp
  • Windows (vcpkg): vcpkg install yaml-cpp


Também é possível compilar a partir do código-fonte, baixando o repositório do GitHub e usando CMake:



git clone https://github.com/jbeder/yaml-cpp.gitcd yaml-cppmkdir build && cd buildcmake ..makesudo make install


Fundamentos do yaml-cpp



A biblioteca fornece uma API intuitiva para carregar, modificar e salvar dados YAML. Todos os tipos de dados são armazenados no contêiner YAML::Node, que pode ser um escalar, uma sequência (array) ou um mapeamento (dicionário).



Exemplo de arquivo YAML



Considere o seguinte arquivo de configuração 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.1


Parsing de arquivo YAML



Para carregar dados de um arquivo, usa-se a função YAML::LoadFile():



#include <yaml-cpp/yaml.h>#include <iostream>#include <string>#include <vector>

int main() { try { // Carrega o arquivo YAML YAML::Node config = YAML::LoadFile("config.yaml");

// Acessa dados aninhados usando o 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;

// Trabalhando com sequência (lista) 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;}


Criação e serialização de YAML



O yaml-cpp também permite criar documentos YAML programaticamente e salvá-los em um arquivo:



#include <yaml-cpp/yaml.h>#include <fstream>

int main() { // Cria o nó raiz YAML::Node config;

// Adiciona dados config["application"]["name"] = "MyApp"; config["application"]["version"] = 2.1; config["application"]["debug"] = false;

// Cria uma sequência config["features"].push_back("logging"); config["features"].push_back("caching"); config["features"].push_back("auth");

// Em

Recommendations