Parser JSON
Presentation
Objectif principal : Une bibliotheque C pour parser du JSON et le transformer en structure de donnees manipulable. Aussi la serialisation inverse : struct C vers JSON string.
Technologies utilisees : C pur sans dependances. Parser recursif descent ecrit a la main. Gestion memoire avec allocation dynamique et liberation propre.
Fonctionnalites cles : Parse tous les types JSON (objets, tableaux, strings, nombres, booleens, null), acces par chemin (json["user"]["name"]), modification en place, serialisation avec indentation optionnelle.
Livrables attendus : Une lib .h/.c reutilisable. API simple style json_parse(), json_get(), json_stringify(). Pas de fuites memoire.
Calendrier previsionnel : Deux semaines. La recursion pour les objets imbriques c'est un peu tricky, et les strings echappees c'est galere.
Parties prenantes & criteres de succes : Projet pour pratiquer le C et les parsers. Je voulais une lib que je pourrais reutiliser dans d'autres projets.
Le Defi
Les strings avec echappement. Le JSON autorise \n, \t, \", \\, et meme \uXXXX pour l'unicode. Faut parser tout ca correctement et aussi le re-serialiser. Et la gestion memoire en C, un oubli de free et c'est la fuite.
La Solution
Pour les strings, je parse caractere par caractere et je gere les sequences d'echappement dans une fonction dediee. Pour la memoire, chaque json_value a un type et j'ai fait json_free() qui libere recursivement selon le type.
Architecture Technique
Structure JsonValue avec un enum pour le type et une union pour la valeur. Fonctions parse_value, parse_object, parse_array, parse_string, parse_number qui s'appellent mutuellement. Fonction json_get qui navigue avec un chemin style "user.address.city".
Points Cles
- Parser recursif descent
- Gestion memoire sans fuites
- API simple et intuitive
Apercu
Resultats & Apprentissages
La lib marche bien et je l'ai reutilisee dans d'autres projets. Valgrind confirme zero fuite memoire. J'ai bien compris les parsers recursifs et la gestion memoire en C. Ecrire une lib propre c'est satisfaisant.
Evolutions Futures
Mode streaming pour parser de gros fichiers sans tout charger en memoire. Support des commentaires (extension non-standard mais pratique). Optimisation des perfs pour les gros JSON.