Arbeit mit JSON in C++: Parsing und Serialisierung in der Praxis

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

Arbeit mit JSON in C++: Parsing und Serialisierung in der Praxis



JSON (JavaScript Object Notation) ist eines der beliebtesten Formate für den Datenaustausch in modernen Anwendungen. Obwohl C++ keine integrierte Unterstützung für JSON bietet, gibt es zahlreiche Bibliotheken, die die Arbeit mit diesem Format vereinfachen. In diesem Artikel betrachten wir die praktischen Aspekte des Parsings und der Serialisierung von JSON in C++ mit der Bibliothek nlohmann/json – einer der beliebtesten und benutzerfreundlichsten.



Warum nlohmann/json wählen?



Die Bibliothek nlohmann/json (oft als JSON for Modern C++ bezeichnet) hat aufgrund ihrer intuitiven API, die an die Arbeit mit STL-Containern erinnert, an Popularität gewonnen. Sie ist header-only (erfordert keine Kompilierung), unterstützt C++11 und höher und bietet hohe Leistung und Typsicherheit.



Die Installation der Bibliothek ist einfach: Laden Sie einfach die Header-Datei json.hpp herunter oder verwenden Sie den Paketmanager vcpkg, Conan oder CMake FetchContent.



#include <nlohmann/json.hpp>using json = nlohmann::json;


Grundlagen des JSON-Parsings in C++



JSON-Parsing ist der Prozess der Umwandlung eines Strings in strukturierte Daten. Die Bibliothek nlohmann/json bietet mehrere Möglichkeiten zum Parsen.



Parsen aus einem String



Die gebräuchlichste Methode ist die Verwendung der statischen Methode json::parse():



#include <iostream>#include <string>#include <nlohmann/json.hpp>

int main() { std::string json_string = R"({ "name": "Iwan", "age": 30, "is_student": false, "skills": ["C++", "Python", "JavaScript"], "address": { "city": "Moskau", "zip": "101000" } })";

try { json data = json::parse(json_string); // Zugriff auf Daten std::cout << "Name: " << data["name"] << std::endl; std::cout << "Alter: " << data["age"] << std::endl; std::cout << "Student: " << (data["is_student"] ? "ja" : "nein") << std::endl; // Arbeiten mit Arrays for (auto& skill : data["skills"]) { std::cout << "Fähigkeit: " << skill << std::endl; } // Arbeiten mit verschachtelten Objekten std::cout << "Stadt: " << data["address"]["city"] << std::endl; } catch (json::parse_error& e) { std::cerr << "Parsing-Fehler: " << e.what() << std::endl; } return 0;}


Parsen aus einer Datei



Verwenden Sie für die Arbeit mit Dateien die C++-Ein-/Ausgabestreams:



#include <fstream>#include <nlohmann/json.hpp>

int main() { std::ifstream file("data.json"); if (!file.is_open()) { std::cerr << "Datei konnte nicht geöffnet werden" << std::endl; return 1; } try { json data = json::parse(file); std::cout << "Daten geladen: " << data.dump(2) << std::endl; } catch (json::parse_error& e) { std::cerr << "Fehler: " << e.what() << std::endl; } return 0;}


JSON-Serialisierung in C++



Serialisierung ist der umgekehrte Prozess: die Umwandlung von C++-Daten in einen JSON-String. Die Bibliothek bietet die Methode dump() mit Formatierungsmöglichkeiten.



Erstellen eines JSON-Objekts



Sie können JSON-Objekte direkt erstellen, wie gewöhnliche assoziative Arrays:



#include <nlohmann/json.hpp>#include <iostream>

int main() { json person; person["name"] = "Maria"; person["age"] = 25; person["is_employed"] = true; person["languages"] = {"Russisch", "Englisch", "Deutsch"};

Blogs

Buchempfehlungen