JSON til Protobuf-konverter
Indsæt et JSON-objekt. Få et proto3-skema med udledte typer og indlejrede messages pænt sat op for dig.
Input (JSON)
Output (.proto-skema)
Hvad værktøjet gør
Har du en rigtig JSON-payload — et eksempel på et API-svar, en webhook-body, en række fra et NoSQL-store — og vil du modellere det som en Protocol Buffers-message? At skrive skemaet i hånden er langsomt og let at lave fejl i, især når der er indlejrede objekter og arrays. Denne konverter går igennem JSON, udleder Protobuf-typer for hvert felt og spytter et rent proto3-skema ud, som du kan klistre direkte ind i dit projekt.
Typeudledningen følger det, du selv ville skrive: string for strenge, bool for booleans, int32 for heltal der passer i 32 bit, int64 for resten, double for ikke-heltal, repeated <T> for arrays med ensartet elementtype (én indlejret message genbruges til arrays af objekter) og indlejrede message-blokke for indlejrede objekter. JSON skelner ikke struct fra map, så alle objekter kommer ud som indlejrede messages — skift selv til map<K, V>, hvis dine data faktisk er et map.
Feltnavne konverteres fra camelCase eller kebab-case til det Protobuf-konventionelle snake_case. Feltnumre tildeles 1, 2, 3, … i deklarationsrækkefølge. Outputtet er gyldig proto3 — klistr det ind i en .proto-fil, kør protoc eller buf, og du har genereret kode i det sprog, du vælger. Konverteringen kører helt i din browser — ingen JSON, ingen feltnavne, ingen værdier sendes nogen steder hen.
Sådan bruger du det
Tre trin. Virker med ethvert velformet JSON-objekt — API-svar, log-indgange, fixture-filer, hvad som helst.
Indsæt din JSON
Smid JSON ind i venstre editor. Roden skal være et objekt ({ ... }) — pak et array ind i et objekt først, hvis dine data er array-rooted, fx { "items": [...] }. Brug realistiske data: jo mere repræsentativt prøveudtagningen er, desto bedre matcher de udledte typer det, du vil have på sigt.
Hvis din JSON har ucitierede nøgler, afsluttende kommaer eller andre særheder, så kør den gennem JSON Fixer først — Protobuf vil have et rent objekt at arbejde ud fra.
Tryk Konvertér
Klik på den grønne Konvertér-knap. Konverteren går igennem hver nøgle i JSON, vælger en Protobuf-type, bygger indlejrede message-blokke for indlejrede objekter og spytter skemaet ud med syntax = "proto3"; øverst. Feltnumre tildeles i kilderækkefølge.
Brug .proto-filen
Kopiér skemaet ind i en .proto-fil i dit repo. Gennemgå de udledte typer — for felter, hvor JSON-prøven var tom (tomt array, null), ser du en kommentar, der markerer, at typen er gættet. Tilpas hvor det er nødvendigt, og kør så protoc eller buf generate for at producere kode i dit sprog.
Hvornår det faktisk sparer tid
Modellere et tredjeparts-API som Protobuf
En leverandør returnerer JSON. Din service gemmer Protobuf. Tag et rigtigt svar, klistr det ind her, få et startskema for typen, og finpuds derefter. Bedre end at læse dokumentationen og taste 50 felter ind i hånden.
Migrere en JSON-baseret service til gRPC
Du flytter en HTTP+JSON-microservice til gRPC. Hver request- og response-form kræver en .proto. Konvertér hver opfanget payload til et Protobuf-skema, klistr dem i én fil, og du har skitseret kontrakten.
Bootstrappe et Buf-modul
Sætter du et nyt Buf-modul op og mangler realistiske skemaer at starte med? Konvertér dine eksisterende JSON-fixtures og brug outputtet som frø til dine .proto-filer — meget hurtigere end at skrive dem fra bunden.
Skrive testfixtures til Protobuf-kode
Dit team har JSON-testdata. Den nye kode konsumerer Protobuf. Generér <code>.proto</code> ud fra JSON, og lad din codegen bygge typerne — fixtures og kode holdes i sync.
Almindelige spørgsmål
Bliver min JSON sendt nogen steder hen?
Nej. Konverteren kører helt i din browser som JavaScript. Din JSON — nøgler, værdier, alt følsomt — forlader aldrig din maskine. Åbn DevTools og hold øje med Network-fanen, mens du klikker Konvertér. Nul requests.
Hvordan vælger den mellem int32, int64 og double?
For heltalsværdier tjekker den, om værdien passer i et fortegnsbehæftet 32-bit-interval (-2^31 til 2^31-1). Hvis ja, int32. Hvis nej, int64. Tal der ikke er heltal bliver altid double. Hvis du ved, at dine data er fortegnsfri, eller du vil have en bestemt bredde som fixed32, så redigér outputtet — se tabellen over skalartyper for alle tilgængelige numeriske typer og deres wire-encoding-trade-offs.
Hvornår bliver et objekt et map i stedet for en indlejret message?
Altid en indlejret message — aldrig et map. JSON skelner ikke struct fra map, så at gætte den ene eller den anden er forkert ca. halvdelen af tiden. Hvis dine data faktisk er et nøgle-værdi-map (fx metadata, headers, feature flags), så åbn outputtet og udskift selv message Foo { ... } med map<string, V> foo = N;. Rettelsen er mekanisk og åbenlys, så snart du ser dine data.
Hvad med null og tomme arrays?
Begge producerer en kommentar i outputtet, der markerer, at typen er gættet ud fra et udartet prøveudtag. null falder tilbage på string med en "nullable"-note. Tomme arrays falder tilbage på repeated string med en "empty array"-note. Skift de typer ud med det, du faktisk forventer.
Hvorfor renderes arrays med blandede typer som repeated string?
Protobuf understøtter ikke heterogene lister direkte. Hvis dit JSON-array har blandede typer (nogle strenge, nogle tal), er der ingen ren Protobuf-modsvarighed — du har brug for enten google.protobuf.Value, et oneof, eller en omskrivning af dataformen. Konverteren markerer det med en kommentar, så du kan beslutte.
Klarer den dybt indlejret JSON?
Ja. Hvert indlejret objekt bliver en indlejret message med et afledt PascalCase-navn. Indlejringsdybden er kun begrænset af stakdybden, ikke af konverteren — selv meget indlejrede API-svar konverteres pænt.
Kan jeg lave round-trip JSON ↔ Protobuf med disse to værktøjer?
Det meste af tiden. JSON til Protobuf giver dig et skema; Protobuf til JSON giver dig en prøve. Formerne matcher for felter, hvor JSON-prøven havde en repræsentativ værdi. Hvor JSON havde null eller tomme arrays, er den udledte Protobuf-type et gæt, og round-trip vil først være præcis, efter du har rettet typen.
Relaterede værktøjer
Hvis du roder med JSON og skemaer, passer disse godt sammen: