Einführung in die Arbeit mit JSON in C++
JSON (JavaScript Object Notation) ist ein leichtes Datenaustauschformat, das häufig in der Webentwicklung, Konfigurationsdateien und APIs verwendet wird. Obwohl C++ keine integrierte Unterstützung für JSON bietet, gibt es viele Bibliotheken, die die Arbeit mit diesem Format einfach und bequem machen. In diesem Artikel werden wir uns ansehen, wie man JSON-Daten in C++ mit der beliebten Bibliothek nlohmann/json parst und serialisiert. Das Material richtet sich an Anfänger, die bereits mit den Grundlagen von C++ vertraut sind.
1. Installation und Einbindung der Bibliothek nlohmann/json
Die Bibliothek nlohmann/json ist eine der beliebtesten und am einfachsten zu verwendenden Bibliotheken für die Arbeit mit JSON in C++. Sie unterstützt C++11 und höher und funktioniert auf allen gängigen Plattformen.
Installationsmethoden
- Header-Datei herunterladen: Gehen Sie zum GitHub-Repository und laden Sie die Datei
json.hppherunter. - Installation über vcpkg:
vcpkg install nlohmann-json - Installation über Conan:
conan install nlohmann_json/3.11.2@
Nach der Installation binden Sie die Datei einfach in Ihr Projekt ein:
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { std::cout << "Bibliothek eingebunden!" << std::endl; return 0;}2. JSON-Parsing: Daten aus einem String und einer Datei lesen
Parsing (Analysieren) von JSON ist der Prozess der Umwandlung eines JSON-Strings in C++-Datenstrukturen. Die Bibliothek nlohmann/json macht dies sehr einfach.
Parsing aus einem String
Betrachten wir ein Beispiel für das Parsen eines einfachen JSON-Objekts:
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { std::string json_str = R"({ "name": "Anna", "age": 25, "is_student": false, "hobbies": ["Lesen", "Schwimmen", "Programmieren"] })";
// Parsen des Strings json data = json::parse(json_str);
// Zugriff auf die Daten std::string name = data["name"]; int age = data["age"]; bool is_student = data["is_student"]; std::vector<std::string> hobbies = data["hobbies"];
std::cout << "Name: " << name << std::endl; std::cout << "Alter: " << age << std::endl; std::cout << "Student: " << (is_student ? "ja" : "nein") << std::endl; std::cout << "Hobbys: "; for (const auto& hobby : hobbies) { std::cout << hobby << " "; } std::cout << std::endl;
return 0;}Parsing aus einer Datei
Oft werden JSON-Daten in Dateien gespeichert. So lesen Sie sie aus:
#include <iostream>#include <fstream>#include "json.hpp"using json = nlohmann::json;
int main() { std::ifstream file("data.json"); if (!file.is_open()) { std::cerr << "Fehler beim Öffnen der Datei!" << std::endl; return 1; }
json data = json::parse(file); file.close();
// Ausgabe der Daten std::cout << "Daten aus der Datei: " << data.dump(4) << std::endl; return 0;}Die Methode dump(4) wandelt das JSON zurück in einen String mit einem Einzug von 4 Leerzeichen zur besseren Lesbarkeit.
3. Serialisierung: Erstellen von JSON aus C++-Daten
Serialisierung ist der umgekehrte Prozess: die Umwandlung von C++-Daten in einen JSON-String. Die Bibliothek ermöglicht die intuitive Erstellung von JSON-Objekten.
Erstellen eines einfachen JSON-Objekts
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { json person;
person["name"] = "Ivan";