Traitement JSON en C++ avec la bibliothèque nlohmann/json
Dans le développement moderne en C++, la manipulation de JSON (JavaScript Object Notation) est devenue une partie intégrante lors de la création de services web, de fichiers de configuration et de l'échange de données entre systèmes. L'une des bibliothèques les plus populaires et pratiques pour cette tâche est nlohmann/json (ou simplement JSON for Modern C++). Elle offre une API intuitive, une syntaxe minimaliste et des performances élevées. Dans cet article, nous allons détailler comment utiliser cette bibliothèque pour analyser, créer, modifier et sérialiser des données JSON en C++.
Installation et inclusion
La bibliothèque nlohmann/json est header-only (constituée uniquement de fichiers d'en-tête). Pour l'installer, il suffit de télécharger le fichier json.hpp depuis le dépôt officiel et de l'inclure dans votre projet :
#include <nlohmann/json.hpp>using json = nlohmann::json;Si vous utilisez CMake, vous pouvez inclure la bibliothèque via FetchContent ou vcpkg. Exemple pour 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)Fonctionnalités principales de la bibliothèque
- Analyse JSON à partir d'une chaîne ou d'un fichier – conversion du texte en données structurées.
- Création d'objets JSON – formation dynamique de structures à l'aide des opérateurs
[]et des méthodes. - Accès aux données – lecture des valeurs par clés et indices avec vérification des types.
- Sérialisation – conversion d'un objet JSON en chaîne avec formatage.
- Manipulation de tableaux et d'objets imbriqués – prise en charge de structures hiérarchiques complexes.
- Gestion des erreurs – exceptions en cas de données ou de types incorrects.
Exemple 1 : Analyse et lecture de données
Prenons un exemple simple : nous avons une chaîne JSON contenant des informations sur un utilisateur. Analysons-la et extrayons les valeurs :
#include <iostream>#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() { std::string json_str = R"( { "name": "Иван", "age": 30, "is_student": false, "hobbies": ["чтение", "программирование", "спорт"] } )";
// Analyse de la chaîne en objet json json user = json::parse(json_str);
// Accès aux données avec vérification de type std::string name = user["name"]; int age = user["age"]; bool is_student = user["is_student"];
std::cout << "Nom : " << name << std::endl; std::cout << "Âge : " << age << std::endl; std::cout << "Étudiant : " << (is_student ? "oui" : "non") << std::endl;
// Manipulation du tableau auto& hobbies = user["hobbies"]; std::cout << "Loisirs : "; for (const auto& hobby : hobbies) { std::cout << hobby << " "; } std::cout << std::endl;
return 0;}Exemple 2 : Création et sérialisation JSON
Il est souvent nécessaire de former une structure JSON par programmation. Le code suivant crée un objet avec des données sur un livre et l'affiche sous forme formatée :
#include <iostream>#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() { // Création d'un objet vide json book;
// Remplissage des données book["title"] = "Война и мир"; book["author"] = "Лев Толстой"; book["year"] = 1869; book["genres"] = {"роман", "историческая литература"};
// Objet imbriqué book["publisher"]["name"] = "Эксмо";