Ir para o conteúdo

Esquema JSON para Protobuf

Converta um exemplo JSON numa definição de mensagem Protocol Buffers .proto.

Entrada
Saída

Esquema JSON para Protobuf

Cole um exemplo JSON e esta ferramenta deduz a forma dos seus dados e escreve-os como uma definição de mensagem Protocol Buffers, pronta a colar num ficheiro .proto. É construída para o caso comum de converter uma resposta de API, um objeto de configuração ou um registo de log numa schema inicial, em vez de digitar números de campo e tipos manualmente.

Escolha a sintaxe proto3 ou proto2, nomeie a mensagem raiz e adicione uma declaração de pacote se o seu projeto usar uma. Os números de campo começam em 1 por padrão e aumentam em 1 por campo, ambos configuráveis para um esquema de numeração reservado antecipadamente. Arrays tornam-se campos repeated, e um objeto cujos valores são todos do mesmo tipo — uma busca indexada por ID ou código de idioma — torna-se um map<string, T> em vez de uma mensagem fixa, para que um campo de dicionário não se transforme em dezenas de campos nomeados. Ative a palavra-chave optional para marcar campos ausentes ou nulos em parte da sua amostra, e alterne mensagens aninhadas para manter tipos filhos dentro do seu pai em vez de como irmãos de nível superior plano. Strings de data com aspeto ISO 8601 mapeiam para google.protobuf.Timestamp, e cada campo pode incluir um comentário com sua chave JSON original.

Objetos profundamente aninhados, arrays de objetos, arrays de arrays e campos de tipo misto são todos tratados: um valor genuinamente de tipo misto recua para google.protobuf.Value com a importação correspondente adicionada automaticamente. JSON malformado é relatado com a linha e coluna onde a análise falhou em vez de um erro genérico.

Tudo é executado localmente no seu navegador — seu JSON nunca é enviado para lado nenhum. Copie o esquema gerado, baixe-o como ficheiro .txt para renomear para .proto, ou envie o resultado para outra ferramenta para continuar a trabalhar.

FAQ

Produz uma sintaxe real e compilável .proto?
Sim — o resultado é sintaxe de mensagem protobuf simples (proto2 ou proto3) que pode colar diretamente num ficheiro .proto. A manutenção a longo prazo, como manter os números de campo estáveis entre mudanças de schema, ainda é da sua responsabilidade.
Como é que decide entre um map e uma mensagem para um campo de objeto?
Quando cada valor dentro de um objeto é do mesmo tipo escalar, é renderizado como map<string, T> — a forma que um dicionário real tem. Assim que um objeto mistura tipos de valores entre suas chaves, torna-se um campo de mensagem nomeado campo a campo em vez disso.
O que acontece com um campo que tem tipos diferentes numa amostra?
Ele recua para google.protobuf.Value, com a importação correspondente adicionada no topo do esquema. Refine o tipo de campo manualmente uma vez que você decidiu qual tipo é autoritário.
Posso numerar campos começando noutro lugar que não seja 1?
Sim — defina o número inicial e o passo nas opções. A numeração reinicia no seu valor inicial escolhido dentro de cada mensagem aninhada, correspondendo a como protobuf define o escopo dos números de campo.
O meu JSON é enviado para algum lado?
Não. A geração de esquema é executada totalmente no seu navegador — seu JSON nunca deixa seu dispositivo.