Convertisseur Protobuf vers JSON
Colle un schéma .proto. Récupère un exemple JSON qui le respecte, avec les valeurs par défaut proto3 déjà remplies.
Entrée (schéma .proto)
Sortie (exemple JSON)
Ce que fait cet outil
Tu as un schéma Protocol Buffers et il te faut un exemple JSON de l'allure d'un de ces messages — pour une fixture de test, un exemple OpenAPI, une réponse gRPC mockée, peu importe. Taper à la main la forme JSON depuis un long fichier .proto est pénible et source d'erreurs. Ce convertisseur lit le schéma, prend le dernier message déclaré (le type "extérieur" habituel) et sort un objet JSON qui correspond champ par champ.
La sortie utilise les valeurs par défaut proto3 officielles : chaîne vide pour string et bytes, 0 pour les types numériques, false pour bool, [] pour repeated, {} pour map, et la constante d'enum à valeur zéro pour les champs enum. Les messages imbriqués sont développés récursivement. Les entiers 64 bits sortent en chaînes JSON pour coller à la spec du mapping JSON proto3 — tu ne peux pas mettre un int64 dans un Number JS sans perdre de la précision.
Tout se passe localement dans ton navigateur — pas d'upload du .proto, pas de schéma envoyé à un serveur, pas d'appel d'inférence. Juste un parser fait main qui gère les directives syntax/package/import, les commentaires (ligne et bloc), les blocs message et enum imbriqués, oneof, map<K, V>, repeated, optional, et les options de champ (lues mais ignorées). Si tu veux un runtime complet style protobufjs, c'est un autre problème — mais pour "donne-moi une forme JSON depuis ce schéma", c'est plus rapide.
Comment l'utiliser
Trois étapes. Le JSON de sortie est prêt à coller dans une fixture, un bloc d'exemple ou un body de requête directement.
Colle ton schéma .proto
Mets le schéma dans l'éditeur de gauche. syntax = "proto3"; en haut, c'est bien mais facultatif — le parser s'en moque. Commentaires, déclarations de package et instructions import sont tous ignorés proprement. Si tu as plusieurs messages, le parser prend le dernier message de niveau racine (typiquement le type extérieur/composite) comme racine.
Tu veux convertir un autre message ? Déplace celui qui t'intéresse en bas du fichier. Le schéma peut contenir des types imbriqués, des enums et des blocs oneof — tout est résolu.
Clique sur Convertir
Clique sur le bouton vert Convertir. Le parser tokenise le schéma, construit un arbre de messages et parcourt le message racine en émettant les valeurs par défaut proto3 pour chaque champ. Les messages imbriqués sont développés inline. Les champs repeated produisent un tableau à un élément en guise d'indice de la forme — un tableau vide ne montrerait pas la structure.
Utilise le JSON
Copie le résultat dans ta fixture de test, ton bloc d'exemple OpenAPI, ton mock gRPC-Web, ou partout où tu as besoin d'une forme requête/réponse. Les clés correspondent exactement aux noms de champs .proto — passe en camelCase ensuite si ton codegen le fait.
Quand ça fait vraiment gagner du temps
Mocker des réponses gRPC pour les tests
Ton handler de service renvoie une réponse Protobuf. Le test unitaire a besoin d'une fixture JSON qui colle à la forme du message. Colle le <code>.proto</code>, attrape le JSON, dépose-le dans ton dossier fixtures. Fini les 30 champs tapés à la main avec un oubli.
Exemples OpenAPI pour une gRPC-gateway
Tu fais tourner grpc-gateway ou similaire pour exposer des services Protobuf en REST ? Chaque opération demande un exemple JSON. Convertis chaque message .proto en squelette JSON et colle-le sous la clé example dans ton spec.
Démarrer un JSON Schema
Tu veux valider des requêtes JSON qui correspondent à un contrat <code>.proto</code>. Convertis d'abord en exemple JSON, passe-le à un outil JSON-Schema-from-sample, et tu as un schéma de départ en quelques secondes.
Remplir des bodies de requêtes dans les clients API
Tu testes une API gRPC transcodée HTTP dans Postman ou avec curl ? Colle le .proto, copie le squelette JSON dans le body, remplis les valeurs que tu veux vraiment envoyer.
Questions courantes
Mon schéma .proto est-il envoyé quelque part ?
Non. Le parsing se fait entièrement dans ton navigateur en JavaScript. Rien de ton schéma — noms de messages, noms de champs, chemins de package — ne quitte ta machine. Ouvre les DevTools et regarde l'onglet Network pendant que tu cliques Convertir. Zéro requête.
Gère-t-il proto2 aussi bien que proto3 ?
En grande partie. Le parser gère les tokens proto2 comme required et optional, mais les valeurs de sortie utilisent les défauts proto3 (ce que spécifie le mapping JSON proto3). Si tu as un fichier proto2 avec des défauts explicites via [default = ...], ces défauts ne sont pas appliqués à la sortie.
Comment choisit-il quel message convertir ?
Il prend le dernier message de niveau racine déclaré dans le fichier. Dans les schémas réels, le type extérieur/composite est généralement déclaré après ses dépendances, donc ça colle souvent à ce que tu veux. S'il prend le mauvais, réordonne le fichier pour que le message voulu soit en dernier.
Pourquoi les int64 sont-ils des chaînes en sortie ?
Parce que JSON n'a que des doubles IEEE-754, qui perdent en précision au-dessus de 2^53. Le mapping JSON proto3 officiel demande que int64, uint64, fixed64, sfixed64, sint64 soient encodés en chaînes JSON. On suit cette convention.
Et oneof, map et repeated ?
Les trois marchent. Les champs oneof sont parsés comme des champs normaux (l'objet JSON les inclut tous au lieu d'en choisir un — tu supprimes typiquement ceux que tu ne veux pas). map<K, V> émet un objet {} vide. repeated émet un tableau à un seul élément montrant la forme de l'élément — tu peux dupliquer ou supprimer pour coller à tes données réelles.
Suit-il les imports ?
Non. Les instructions import sont reconnues et ignorées. Les types de messages cross-fichier se résolvent en null dans la sortie. Si tu as besoin de résolution cross-fichier, colle les messages pertinents des fichiers importés dans la même entrée.
Quelle taille de schéma peut-il gérer ?
Des dizaines de milliers de lignes, sans problème. Tout est local, donc pas d'upload, pas de rate limit, pas de latence réseau.
Outils liés
Si tu jongles avec Protobuf, JSON et des schémas, ceux-ci se complètent bien :