Introduction au travail avec JSON en C++
JSON (JavaScript Object Notation) est un format léger d'échange de données, largement utilisé dans le développement web, les fichiers de configuration et les API. Bien que C++ ne dispose pas de support intégré pour JSON, il existe de nombreuses bibliothèques qui rendent le travail avec ce format simple et pratique. Dans cet article, nous verrons comment analyser (parser) et sérialiser (créer) des données JSON en C++ en utilisant la bibliothèque populaire nlohmann/json. Ce contenu est destiné aux développeurs débutants qui connaissent déjà les bases du C++.
1. Installation et inclusion de la bibliothèque nlohmann/json
La bibliothèque nlohmann/json est l'une des plus populaires et des plus simples à utiliser pour travailler avec JSON en C++. Elle prend en charge C++11 et versions ultérieures, et fonctionne sur toutes les plateformes principales.
Méthodes d'installation
- Télécharger le fichier d'en-tête : rendez-vous sur le dépôt GitHub et téléchargez le fichier
json.hpp. - Installation via vcpkg :
vcpkg install nlohmann-json - Installation via Conan :
conan install nlohmann_json/3.11.2@
Après l'installation, incluez simplement le fichier dans votre projet :
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { std::cout << "Bibliothèque incluse !" << std::endl; return 0;}2. Parsing JSON : lecture de données à partir d'une chaîne et d'un fichier
Le parsing (analyse) de JSON est le processus de conversion d'une chaîne au format JSON en structures de données C++. La bibliothèque nlohmann/json rend cela très simple.
Parsing à partir d'une chaîne
Examinons un exemple d'analyse d'un objet JSON simple :
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { std::string json_str = R"({ "name": "Anna", "age": 25, "is_student": false, "hobbies": ["lecture", "natation", "programmation"] })";
// Parsing de la chaîne json data = json::parse(json_str);
// Accès aux données std::string name = data["name"]; int age = data["age"]; bool is_student = data["is_student"]; std::vector<std::string> hobbies = data["hobbies"];
std::cout << "Nom : " << name << std::endl; std::cout << "Âge : " << age << std::endl; std::cout << "Étudiant : " << (is_student ? "oui" : "non") << std::endl; std::cout << "Loisirs : "; for (const auto& hobby : hobbies) { std::cout << hobby << " "; } std::cout << std::endl;
return 0;}Parsing à partir d'un fichier
Les données JSON sont souvent stockées dans des fichiers. Voici comment les lire :
#include <iostream>#include <fstream>#include "json.hpp"using json = nlohmann::json;
int main() { std::ifstream file("data.json"); if (!file.is_open()) { std::cerr << "Erreur d'ouverture du fichier !" << std::endl; return 1; }
json data = json::parse(file); file.close();
// Affichage des données std::cout << "Données du fichier : " << data.dump(4) << std::endl; return 0;}La méthode dump(4) convertit le JSON en une chaîne avec une indentation de 4 espaces pour une lecture facile.
3. Sérialisation : création de JSON à partir de données C++
La sérialisation est le processus inverse : la conversion de données C++ en une chaîne JSON. La bibliothèque permet de créer des objets JSON de manière intuitive.
Création d'un objet JSON simple
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { json person;
person["name"] = "Ivan";