JSON-Verarbeitung in C++ mit der Bibliothek nlohmann/json
In der modernen C++-Entwicklung ist die Arbeit mit JSON (JavaScript Object Notation) ein wesentlicher Bestandteil bei der Erstellung von Webdiensten, Konfigurationsdateien und dem Datenaustausch zwischen Systemen. Eine der beliebtesten und bequemsten Bibliotheken für diese Aufgabe ist nlohmann/json (oder einfach JSON for Modern C++). Sie bietet eine intuitive API, eine minimalistische Syntax und hohe Leistung. In diesem Artikel werden wir im Detail besprechen, wie man diese Bibliothek zum Parsen, Erstellen, Ändern und Serialisieren von JSON-Daten in C++ verwendet.
Installation und Einbindung
Die Bibliothek nlohmann/json ist header-only (besteht nur aus Header-Dateien). Für die Installation reicht es, die Datei json.hpp vom offiziellen Repository herunterzuladen und in das Projekt einzubinden:
#include <nlohmann/json.hpp>using json = nlohmann::json;Wenn Sie CMake verwenden, können Sie die Bibliothek über FetchContent oder vcpkg einbinden. Beispiel für CMake:
FetchContent_Declare(json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.2)FetchContent_MakeAvailable(json)
target_link_libraries(your_project PRIVATE nlohmann_json::nlohmann_json)Hauptfunktionen der Bibliothek
- JSON aus einem String oder einer Datei parsen – Umwandlung von Text in strukturierte Daten.
- JSON-Objekte erstellen – dynamisches Erstellen von Strukturen mit den Operatoren
[]und Methoden. - Datenzugriff – Auslesen von Werten nach Schlüsseln und Indizes mit Typüberprüfung.
- Serialisierung – Umwandlung eines JSON-Objekts zurück in einen String mit Formatierung.
- Arbeit mit Arrays und verschachtelten Objekten – Unterstützung komplexer hierarchischer Strukturen.
- Fehlerbehandlung – Ausnahmen bei ungültigen Daten oder Typen.
Beispiel 1: Parsen und Lesen von Daten
Betrachten wir ein einfaches Beispiel: Wir haben einen String mit JSON, der Informationen über einen Benutzer enthält. Wir parsen ihn und extrahieren die Werte:
#include <iostream>#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() { std::string json_str = R"( { "name": "Ivan", "age": 30, "is_student": false, "hobbies": ["lesen", "programmieren", "sport"] } )";
// Parsen des Strings in ein json-Objekt json user = json::parse(json_str);
// Datenzugriff mit Typüberprüfung std::string name = user["name"]; int age = user["age"]; bool is_student = user["is_student"];
std::cout << "Name: " << name << std::endl; std::cout << "Alter: " << age << std::endl; std::cout << "Student: " << (is_student ? "ja" : "nein") << std::endl;
// Arbeit mit einem Array auto& hobbies = user["hobbies"]; std::cout << "Hobbys: "; for (const auto& hobby : hobbies) { std::cout << hobby << " "; } std::cout << std::endl;
return 0;}Beispiel 2: Erstellen und Serialisieren von JSON
Oft ist es erforderlich, eine JSON-Struktur programmatisch zu erstellen. Der folgende Code erstellt ein Objekt mit Daten über ein Buch und gibt es formatiert aus:
#include <iostream>#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() { // Leeres Objekt erstellen json book;
// Daten füllen book["title"] = "Krieg und Frieden"; book["author"] = "Leo Tolstoi"; book["year"] = 1869; book["genres"] = {"Roman", "historische Literatur"};
// Verschachteltes Objekt book["publisher"]["name"] = "Eksmo";