Arbeiten mit YAML in C++: Die Bibliothek yaml-cpp für Parsing und Serialisierung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit YAML in C++: Die Bibliothek yaml-cpp



YAML (YAML Ain't Markup Language) ist ein menschenlesbares Daten-Serialisierungsformat, das häufig für Konfigurationsdateien, Datenaustausch und die Speicherung strukturierter Informationen verwendet wird. In C++ gibt es für die Arbeit mit YAML die leistungsstarke und einfach zu verwendende Bibliothek yaml-cpp. In diesem Artikel werden wir im Detail betrachten, wie man yaml-cpp installiert, konfiguriert und zum Parsen und Erstellen von YAML-Dokumenten verwendet.



Installation von yaml-cpp



Die Bibliothek yaml-cpp ist für die meisten Plattformen verfügbar. Der einfachste Weg der Installation erfolgt über den Paketmanager:



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


Man kann es auch aus den Quellen erstellen, indem man das Repository von GitHub herunterlädt und CMake verwendet:



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


Grundlagen der Arbeit mit yaml-cpp



Die Bibliothek bietet eine intuitive API zum Laden, Ändern und Speichern von YAML-Daten. Alle Datentypen werden im Container YAML::Node gespeichert, der ein Skalar, eine Sequenz (Array) oder eine Abbildung (Dictionary) sein kann.



Beispiel einer YAML-Datei



Betrachten wir die folgende Konfigurationsdatei 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


Parsen einer YAML-Datei



Zum Laden von Daten aus einer Datei wird die Funktion YAML::LoadFile() verwendet:



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

int main() { try { // YAML-Datei laden YAML::Node config = YAML::LoadFile("config.yaml");

// Zugriff auf verschachtelte Daten über den Operator [] 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;

// Arbeiten mit einer Sequenz (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;}


Erstellen und Serialisieren von YAML



yaml-cpp ermöglicht auch das programmatische Erstellen von YAML-Dokumenten und deren Speicherung in einer Datei:



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

int main() { // Root-Knoten erstellen YAML::Node config;

// Daten hinzufügen config["application"]["name"] = "MyApp"; config["application"]["version"] = 2.1; config["application"]["debug"] = false;

// Eine Sequenz erstellen config["features"].push_back("logging"); config["features"].push_back("caching"); config["features"].push_back("auth");

// V

Empfehlungen