RapidJSON pour C++ : guide complet avec exemples
RapidJSON est une bibliothèque haute performance pour l'analyse et la génération de JSON en langage C++. Développée par Milo Yip et distribuée sous licence MIT, elle a gagné en popularité grâce à sa rapidité, sa consommation mémoire minimale et sa conformité totale à la norme ECMA-404 (RFC 7159). Contrairement à de nombreuses autres bibliothèques, RapidJSON ne nécessite aucune dépendance externe et peut fonctionner dans des environnements aux ressources limitées, y compris les systèmes embarqués.
Pourquoi utiliser cette bibliothèque ? JSON (JavaScript Object Notation) est devenu le standard de facto pour l'échange de données entre services web, les fichiers de configuration et le stockage de données structurées. En C++, où les performances sont cruciales, un analyseur lent peut devenir un goulot d'étranglement. RapidJSON résout ce problème : il peut traiter des mégaoctets de JSON en quelques millisecondes, en utilisant une API de type SAX (flux) pour minimiser les allocations et une API DOM pour manipuler facilement l'arborescence des objets. Cela en fait le choix idéal pour les serveurs à forte charge, les moteurs de jeux et les applications temps réel.
La bibliothèque prend en charge à la fois l'analyse complète du JSON (avec validation) et un mode "insensible" pour accélérer le traitement. Elle gère l'UTF-8, l'UTF-16 et l'UTF-32, et fournit des itérateurs pratiques ainsi que des fonctions de recherche. RapidJSON est activement utilisé dans des projets tels que MongoDB, Tencent et de nombreuses solutions open-source.
Installation
RapidJSON est une bibliothèque header-only (à l'exception des fichiers optionnels pour la compilation). Cela signifie que pour l'utiliser, il suffit de copier les fichiers d'en-tête dans votre projet et de les inclure. Cependant, pour plus de commodité, nous allons voir trois méthodes d'installation principales.
Méthode 1 : Cloner le dépôt (recommandé)
Clonez le dépôt GitHub et copiez le dossier include/rapidjson dans votre projet.
git clone https://github.com/Tencent/rapidjson.git
# Copiez ensuite le dossier include/rapidjson dans votre projet
Méthode 2 : Via le gestionnaire de paquets vcpkg
Si vous utilisez vcpkg, l'installation se fait en une seule commande :
vcpkg install rapidjson
Méthode 3 : Via Conan
Pour les utilisateurs de Conan (gestionnaire de paquets C/C++) :
conan install rapidjson/1.1.0@
Inclusion dans le code
Après l'installation, ajoutez ceci à votre fichier source :
#include "rapidjson/document.h" // pour l'API DOM
#include "rapidjson/writer.h" // pour écrire du JSON
#include "rapidjson/stringbuffer.h" // pour la mise en mémoire tampon
#include "rapidjson/prettywriter.h" // pour une sortie formatée
#include "rapidjson/reader.h" // pour l'API SAX
#include "rapidjson/error/en.h" // pour la gestion des erreurs
Démarrage rapide : exemple minimal fonctionnel
Écrivons un programme simple qui analyse une chaîne JSON, extrait une valeur et l'affiche à l'écran.
#include <iostream>
#include "rapidjson/document.h"
int main() {
// 1. Chaîne JSON à analyser
const char* json = "{\"project\":\"RapidJSON\",\"version\":1.0}";
// 2. Créer un document DOM
rapidjson::Document doc;
doc.Parse(json);
// 3. Vérifier si l'analyse a réussi
if (doc.HasParseError()) {
std::cerr << "Erreur d'analyse : "
<< rapidjson::GetParseError_En(doc.GetParseError())
<< std::endl;
return 1;
}
// 4. Extraire les valeurs par clé
const std::string& project = doc["project"].GetString();
double version = doc["version"].GetDouble();
// 5. Afficher le résultat
std::cout << "Projet : " << project << std::endl;
std::cout << "Version : " << version << std::endl;
return 0;
}