JSON naar Protobuf Converter
Plak een JSON-object. Krijg een proto3-schema met afgeleide types en netjes uitgewerkte geneste messages.
Invoer (JSON)
Uitvoer (.proto-schema)
Wat deze tool doet
Heb je een echte JSON-payload — een voorbeeld van een API-response, een webhook-body, een rij uit een NoSQL-store — en wil je die modelleren als een Protocol Buffers-message? Het schema met de hand uittypen is traag en foutgevoelig, zeker met geneste objecten en arrays. Deze converter loopt door het JSON, leidt voor elk veld een Protobuf-type af en levert een schoon proto3-schema dat je zo in je project kunt plakken.
Type-inferentie volgt wat je zelf zou schrijven: string voor strings, bool voor booleans, int32 voor integers die in 32 bits passen, int64 voor de rest, double voor niet-integer getallen, repeated <T> voor arrays met een uniform elementtype (één geneste message hergebruikt voor arrays van objecten) en geneste message-blokken voor geneste objecten. JSON kent geen verschil tussen een struct en een map, dus alle objecten komen eruit als geneste messages — ruil zelf om naar map<K, V> als je data echt een map is.
Veldnamen worden van camelCase of kebab-case omgezet naar het in Protobuf gebruikelijke snake_case. Veldnummers worden in volgorde van declaratie 1, 2, 3, … toegekend. De uitvoer is geldig proto3 — plak het in een .proto-bestand, draai protoc of buf, en je hebt gegenereerde code in de taal van je keuze. De conversie draait volledig in je browser — geen JSON, geen veldnamen, geen waarden worden ergens heen gestuurd.
Hoe je het gebruikt
Drie stappen. Werkt met elk netjes opgemaakt JSON-object — API-responses, log-entries, fixture-bestanden, wat dan ook.
Plak je JSON
Gooi het JSON in de linker editor. De root moet een object zijn ({ ... }) — wikkel een array eerst in een object als je data met een array begint, bijv. { "items": [...] }. Gebruik realistische data: hoe representatiever het sample, hoe beter de afgeleide types op lange termijn aansluiten op wat je echt wilt.
Heeft je JSON onaangehaalde keys, trailing comma's of andere kuren? Haal het eerst door de JSON Fixer — Protobuf wil een schoon object om mee te werken.
Druk op Converteren
Klik de groene Converteren-knop. De converter loopt elke key in het JSON langs, kiest een Protobuf-type, bouwt geneste message-blokken voor geneste objecten en geeft het schema uit met syntax = "proto3"; bovenaan. Veldnummers worden toegekend in bronvolgorde.
Gebruik de .proto
Kopieer het schema naar een .proto-bestand in je repo. Loop de afgeleide types na — voor velden waar het JSON-sample leeg was (lege array, null) zie je een commentaar dat aangeeft dat het type is geraden. Pas aan waar nodig en draai dan protoc of buf generate om code in jouw taal te krijgen.
Wanneer het echt tijd scheelt
Een externe API als Protobuf modelleren
Een leverancier geeft JSON terug. Jouw service slaat Protobuf op. Pak een echte response, plak hem hier, krijg een startschema voor het type en verfijn dat. Beter dan de docs lezen en 50 velden met de hand uittikken.
Een JSON-gebaseerde service migreren naar gRPC
Je verhuist een HTTP+JSON-microservice naar gRPC. Elke request- en response-vorm vraagt om een .proto. Zet elke vastgelegde payload om naar een Protobuf-schema, plak ze in één bestand en het contract is uitgetekend.
Een Buf-module opstarten
Bezig met een nieuwe Buf-module en je hebt realistische schemas nodig om mee te beginnen? Converteer je bestaande JSON-fixtures en gebruik de output als zaadje voor je .proto-bestanden — een stuk sneller dan ze van scratch typen.
Test-fixtures schrijven voor Protobuf-code
Je team heeft testdata in JSON. De nieuwe code consumeert Protobuf. Genereer de <code>.proto</code> uit het JSON en laat je codegen er types van maken — fixtures en code blijven in sync.
Veelgestelde vragen
Wordt mijn JSON ergens heen gestuurd?
Nee. De converter draait volledig in je browser als JavaScript. Je JSON — keys, waarden, alles wat gevoelig is — verlaat je machine nooit. Open DevTools en kijk naar het Network-tabblad terwijl je op Converteren klikt. Nul requests.
Hoe kiest hij tussen int32, int64 en double?
Voor integerwaarden controleert hij of de waarde in een signed 32-bit-bereik past (-2^31 tot 2^31-1). Zo ja, int32. Zo nee, int64. Niet-integer getallen worden altijd double. Weet je dat je data unsigned is of wil je een specifieke breedte zoals fixed32, pas de output dan aan — zie de scalar-typetabel voor alle beschikbare numerieke types en hun wire-encoding-trade-offs.
Wanneer wordt een object een map in plaats van een geneste message?
Altijd een geneste message — nooit een map. JSON onderscheidt een struct niet van een map, dus gokken zit ongeveer de helft van de tijd fout. Is je data daadwerkelijk een key-value-map (bijv. metadata, headers, feature flags), open dan de output en vervang met de hand message Foo { ... } door map<string, V> foo = N;. De fix is mechanisch en duidelijk zodra je je data ziet.
En null en lege arrays?
Beide leveren een commentaar in de output op dat zegt dat het type is geraden uit een gedegenereerd sample. null valt terug op string met een "nullable"-noot. Lege arrays vallen terug op repeated string met een "empty array"-noot. Vervang die types door wat je echt verwacht.
Waarom worden arrays met gemengde types als repeated string weergegeven?
Protobuf ondersteunt heterogene lijsten niet rechtstreeks. Heeft je JSON-array gemengde types (sommige strings, sommige getallen), dan is er geen schoon Protobuf-equivalent — je hebt google.protobuf.Value, een oneof nodig, of je moet de datavorm herwerken. De converter markeert het met een commentaar zodat jij beslist.
Kan hij overweg met diep geneste JSON?
Ja. Elk genest object wordt een geneste message met een afgeleide PascalCase-naam. De nestingdiepte is alleen begrensd door de stackdiepte, niet door de converter — zelfs zwaar geneste API-responses worden netjes geconverteerd.
Kan ik met deze twee tools heen en weer tussen JSON en Protobuf?
Grotendeels wel. JSON naar Protobuf geeft je een schema; Protobuf naar JSON geeft je een sample. De vormen kloppen voor velden waar het JSON-sample een representatieve waarde had. Waar het JSON null of lege arrays had, is het afgeleide Protobuf-type een gok en zal de round-trip pas exact zijn nadat je het type hebt bijgesteld.
Gerelateerde tools
Als je met JSON en schemas in de weer bent, passen deze goed bij elkaar: