Derniere mise a jour : 9 fevrier 2026

Parser JSON

2024 Parsing C

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.

Retour aux projets Me contacter