Travailler avec YAML en C++ : la bibliothèque yaml-cpp pour l'analyse et la sérialisation

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec YAML en C++ : la bibliothèque yaml-cpp



YAML (YAML Ain't Markup Language) est un format de sérialisation de données lisible par l'homme, souvent utilisé pour les fichiers de configuration, l'échange de données et le stockage d'informations structurées. En C++, il existe une bibliothèque puissante et simple d'utilisation pour travailler avec YAML : yaml-cpp. Dans cet article, nous allons voir en détail comment installer, configurer et utiliser yaml-cpp pour analyser et créer des documents YAML.



Installation de yaml-cpp



La bibliothèque yaml-cpp est disponible pour la plupart des plateformes. Le moyen le plus simple de l'installer est via un gestionnaire de paquets :



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


Vous pouvez également la compiler à partir des sources en téléchargeant le dépôt GitHub et en utilisant CMake :



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


Fondamentaux de yaml-cpp



La bibliothèque fournit une API intuitive pour charger, modifier et sauvegarder des données YAML. Tous les types de données sont stockés dans le conteneur YAML::Node, qui peut être un scalaire, une séquence (tableau) ou un mapping (dictionnaire).



Exemple de fichier YAML



Considérons le fichier de configuration suivant 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


Analyse d'un fichier YAML



Pour charger des données à partir d'un fichier, on utilise la fonction YAML::LoadFile() :



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

int main() { try { // Chargement du fichier YAML YAML::Node config = YAML::LoadFile("config.yaml");

// Accès aux données imbriquées via l'opérateur [] 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;

// Travail avec une séquence (liste) 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;}


Création et sérialisation YAML



yaml-cpp permet également de créer des documents YAML par programmation et de les sauvegarder dans un fichier :



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

int main() { // Création du nœud racine YAML::Node config;

// Ajout de données config["application"]["name"] = "MyApp"; config["application"]["version"] = 2.1; config["application"]["debug"] = false;

// Création d'une séquence config["features"].push_back("logging"); config["features"].push_back("caching"); config["features"].push_back("auth");

// En

Recommendations