Convertisseur C vers JSON
Colle des structs ou des initializers C. Récupère du JSON propre.
Ce que fait cet outil
Si tu as déjà eu besoin d'un payload JSON qui reflète un struct C — pour tester un service compilé avec gcc, une config d'un device embarqué, ou un bout de doc — tu connais la chanson : sortir cJSON, écrire le glue code champ par champ, recompiler, débugger. Colle le C ici et récupère du JSON valide sans toucher à un Makefile. Ça gère un initializer désigné seul, un header avec plusieurs structs, ou un truc avec des types imbriqués et des tableaux — même résultat : un document JSON propre avec chaque champ préservé.
Le convertisseur comprend comment les valeurs C se sérialisent vraiment. int, long, size_t, float et double deviennent des nombres JSON. Les tableaux char et les littéraux string deviennent des strings JSON. bool de stdbool.h devient true/false. Les tableaux fixes (int items[3]) deviennent des tableaux JSON avec la bonne longueur. Les structs imbriqués — un Address dans un Order, par exemple — se déploient en objets JSON imbriqués. Le comportement colle à la référence du langage C.
Les initializers désignés du C99 (.field = value) sont pleinement supportés, c'est la façon normale d'écrire des littéraux de struct en vrai aujourd'hui. Les alias typedef sont résolus, et les valeurs enum sortent soit comme valeur numérique soit comme nom du symbole selon le contexte. Les types union sérialisent le membre actif. Les pointeurs vers NULL deviennent null JSON ; sinon la valeur pointée est déployée. Colle plusieurs structs d'un coup et chacun devient une clé top-level dans la sortie.
Comment l'utiliser
Trois étapes. Ça marche pareil pour un initializer de deux lignes que pour un header complet avec vingt typedefs.
Colle ton C (ou charge l'exemple)
Balance ton C tel quel dans l'éditeur de gauche. Une définition de struct, un typedef, un initializer désigné, plusieurs structs, ou des tableaux imbriqués — tout passe. Clique sur Load Sample pour voir d'abord un exemple réaliste.
Pas besoin de virer les directives #include ni les attributs spécifiques au compilateur. Laisse la syntaxe ISO C intacte — le parser gère. Aussi bien C89 que moderne (C11/C17/C23) passent.
Clique sur Convert
Clique sur le bouton vert Convert. L'outil lit le C, parcourt chaque struct, déploie les initializers, et sort le JSON d'une traite. Un indicateur de chargement s'affiche pendant le traitement.
Copie le JSON
Le panneau de droite se remplit de JSON indenté. Copie-le dans ton client HTTP, la config de ton firmware embarqué, une fixture de test, ou un README. Voilà toute la boucle — pas de build.
Quand ça sert vraiment
Config embarquée et firmware
Tu as un struct de config device en C et il te faut une version JSON pour un endpoint REST ou un outil de provisionnement. Colle le struct, récupère le JSON, expédie.
Payloads de requêtes API
Un service C qui wrappe une API tierce. Colle le struct de la requête, récupère du JSON testable avec curl avant de câbler cJSON en prod.
Fixtures de tests unitaires
Transforme les initializers désignés de tes tests unitaires en fichiers JSON seed pour des tests d'intégration ou des comparaisons golden-file.
Docs alignées avec le code
Génère des exemples JSON pour un README ou un doc de protocole direct depuis tes vrais structs, la doc reste en sync avec le fichier header.
Questions fréquentes
Il me faut cJSON ou Jansson installés ?
Non. Cet outil tourne côté serveur et ne compile pas ton code — tu récupères du JSON sans embarquer de librairie de sérialisation. Si tu veux une option runtime, cJSON est le choix habituel ; Jansson est aussi très bien.
Il comprend les initializers désignés et les typedefs ?
Oui. Les initializers désignés du C99 (.field = value) sont pleinement supportés, et les alias typedef sont résolus vers leur struct sous-jacent. Les initializers désignés imbriqués se déploient comme le compilateur les poserait.
Et les tableaux, pointeurs, et NULL ?
Les tableaux de taille fixe deviennent des tableaux JSON avec le bon nombre d'éléments. Les pointeurs à NULL deviennent null JSON ; sinon la valeur pointée est déployée. Les tableaux de structs marchent pareil — chaque élément est un objet JSON imbriqué.
Comment sont gérés enums et unions ?
Les valeurs enum sortent soit comme nom du symbole soit comme valeur numérique selon le contexte. Les types union sérialisent le membre actif. Les bitfields (unsigned flags : 4) deviennent des nombres.
Mon code est-il stocké ?
Ton code est envoyé au backend pour la conversion et n'est pas persisté — on ne log pas le payload. Si le code est vraiment sensible (firmware embarqué avec des secrets, détails de protocole interne), passe-le en revue avant de le coller.
Et si le C a des macros ou des extensions compilateur ?
Les macros qui expandent vers une valeur fonctionnent ; les macros function-like qui font de la vraie logique sont traitées comme opaques et émises en null plutôt que de tout faire planter. Les attributs GCC et MSVC (__attribute__, __declspec) sont tolérés et ignorés.
D'autres outils qui peuvent t'être utiles
C vers JSON n'est qu'une pièce du puzzle. Celles-ci marchent bien avec :