Arbeiten mit JSON in C++: Parsen und Serialisieren von Daten

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 JSON in C++: Parsing und Serialisierung



JSON (JavaScript Object Notation) bleibt eines der beliebtesten Formate für den Datenaustausch in Webanwendungen, Konfigurationsdateien und APIs. Obwohl C++ keine integrierte JSON-Unterstützung bietet, gibt es mehrere leistungsstarke Bibliotheken, die die Arbeit mit diesem Format einfach und effizient machen. In diesem Artikel betrachten wir die beiden beliebtesten Bibliotheken: nlohmann/json (empfohlen für die meisten Projekte) und RapidJSON (für Aufgaben, bei denen die Leistung entscheidend ist). Sie erfahren, wie man JSON parst, Objekte zurück in einen String serialisiert und Fehler behandelt.



Warum wird JSON in C++ benötigt?



C++ ist eine systemnahe Programmiersprache, aber moderne Anwendungen erfordern zunehmend die Interaktion mit Webdiensten, die Speicherung von Konfigurationen oder den Datenaustausch zwischen Microservices. JSON bietet ein praktisches, menschenlesbares Format für diese Aufgaben. Die Verwendung von Bibliotheken für die Arbeit mit JSON in C++ ermöglicht:

  • Laden und Verarbeiten von Konfigurationsdateien (z. B. für Spiel-Engines oder Server).
  • Interaktion mit REST-APIs (Senden und Empfangen von Daten).
  • Speichern und Wiederherstellen des Zustands komplexer Datenstrukturen.
  • Integration mit anderen Sprachen und Systemen, die JSON verwenden.


Die Bibliothek nlohmann/json: Einfachheit und Komfort



Die Bibliothek nlohmann/json (oft als "JSON for Modern C++" bezeichnet) ist wohl die beliebteste, dank ihrer intuitiven API, die an die Arbeit mit Python oder JavaScript erinnert. Sie unterstützt C++11 und höher.



Installation

Der einfachste Weg ist, die einzelne Header-Datei json.hpp in Ihr Projekt zu kopieren. Sie können sie aus dem offiziellen Repository herunterladen oder über einen Paketmanager (vcpkg, Conan) installieren.



Parsing von JSON aus einem String

Betrachten wir ein einfaches Beispiel für das Parsen eines JSON-Strings und den Zugriff auf Daten:

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

int main() { // JSON-String zum Parsen std::string json_string = R"({ "name": "C++", "version": 17, "features": ["RAII", "Templates", "Smart Pointers"], "is_compiled": true })";

// Parsen des Strings in ein json-Objekt json data = json::parse(json_string);

// Zugriff auf Werte std::cout << "Sprache: " << data["name"] << std::endl; std::cout << "Version: " << data["version"] << std::endl; std::cout << "Kompilierbar: " << data["is_compiled"] << std::endl;

// Zugriff auf das Array for (auto& feature : data["features"]) { std::cout << " - " << feature << std::endl; } return 0;}

Ausgabe:

Sprache: "C++"Version: 17Kompilierbar: true - "RAII" - "Templates" - "Smart Pointers"


Serialisierung (JSON erstellen)

Ein JSON-Objekt zu erstellen und es in einen String umzuwandeln ist genauso einfach:

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

int main() { // JSON-Objekt erstellen json person; person["name"] = "Alice"; person["age"] = 30; person["is_student"] = false; person["hobbies"] = {"reading", "coding", "chess"};

// Verschachteltes Objekt hinzufügen person["address"]["city"] = "Moscow"; person["address"]["zip"] = "101000";

// Serialisierung in einen String mit Einrückung std::string serialized = person.dump(4); // 4 Leerzeichen für Einrückung std::cout << serialized << std::endl;

return 0;}

Die Methode dump(4) gibt einen schön formatierten String zurück. Für eine kompakte Ausgabe verwenden Sie dump() ohne Argumente.

Blogs

Buchempfehlungen