Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

📦 libjson — C++ JSON Parser & Builder

Une bibliothèque C++ légère et typée pour la création, la manipulation et le parsing de données JSON.


📖 Vue d'ensemble

libjson est une bibliothèque développée en C++ permettant d'interagir facilement avec des objets JSON. Elle offre une interface intuitive basée sur la surcharge d'opérateurs (comme l'opérateur []) et assure une gestion rigoureuse des types via la classe polymorphe JsonContent.


🚀 Installation & Compilation

Le projet utilise Meson et Ninja pour la compilation, avec un Makefile fourni pour simplifier les commandes.

Prérequis

pip install meson ninja

Compiler la bibliothèque

make

Les objets partagés (.so) seront générés dans le dossier build/.

Structure des fichiers pré-compilés

Lors d'un build, l'arborescence suivante est générée pour faciliter l'intégration :

  • include/ : Contient Json.hpp (le seul fichier d'en-tête dont vous avez besoin).
  • lib/ : Contient les archives statiques libjson.a et libjson.dll.a.
  • bin/ : Contient les bibliothèques dynamiques libjson.so et libjson.dll.

💻 Guide d'utilisation

1. Création et manipulation de données

L'accès et la modification se font de manière transparente. Note : Les clés de l'objet JSON doivent obligatoirement être de type std::string.

#include"Json.hpp"
Json myJson;
// Assignation de valeurs via l'opérateur []
myJson["name"] = "agtdbx";
myJson["is_developer"] = true;
// Assignation via la méthode setContent
myJson.setContent("school", 42);

2. Types supportés par JsonContent

La bibliothèque gère nativement une grande variété de types C++ :

  • Primitifs : int, unsigned int, long, unsigned long, float, double, bool, char, char*, std::string, std::nullptr, (void*)0.
  • Listes : Tous les tableaux JSON sont représentés par des std::vector (ex: std::vector<int>, std::vector<std::string>, etc.).
  • Objets imbriqués : Vous pouvez imbriquer des types Json ou des std::vector<Json>.

⚠️Limitations actuelles : Les listes de listes et les listes implicites ne sont pas supportées (toute liste doit être explicitement encadrée par []).

3. Sérialisation (Objet vers String)

Convertissez votre objet en chaîne de caractères via la méthode toString(bool indented).

// true = formatage multi-lignes indenté avec des tabulations
std::string pretty_output = myJson.toString(true); // false = formatage minifié sur une seule ligne
std::string minified_output = myJson.toString(false); 

4. Parsing (String vers Objet)

Deux approches sont disponibles pour parser une chaîne JSON :

std::string jsonString = "{\"key\": \"value\"}";
// 1. Via la méthode statique
Json parsedJson = Json::parse(jsonString);
// 2. Depuis un objet existant (Attention : cela efface les données précédentes de l'objet)
myJson.parseFromString(jsonString);

⚠️ Gestion des Exceptions

La bibliothèque garantit la sécurité de vos opérations en levant des exceptions claires :

  • JsonParseError : Déclenchée si la syntaxe de la chaîne JSON est invalide lors du parsing.
  • JsonKeyError : Déclenchée lors de l'utilisation de la méthode .getContent(key) si la clé n'existe pas. (Note : utiliser l'opérateur [] avec une clé inexistante créera automatiquement un contenu null au lieu de planter).
  • JsonContentTypeError : Déclenchée lors d'une tentative d'assignation avec un type C++ non supporté.

About

Bibliothèque C++ légère et intuitive pour la création, la manipulation et le parsing de données JSON.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

Languages