Gerador de Formulário HTML a partir de JSON
Lê um schema JSON com campos (label, name, type, required) e gera um formulário HTML completo com inputs estilizados e atributo de validação.
Gerando formulários HTML a partir de JSON: o padrão de form declarativo
Construir formulários à mão é uma das tarefas mais tediosas do desenvolvimento web. Cada campo precisa de label, input, validação, placeholder de erro, acessibilidade, decisões de layout. Quando o admin do CRUD chega na décima segunda tela, o boilerplate vira passivo de manutenção. O padrão de form declarativo inverte o jogo: descreva os dados em JSON e deixe um renderizador gerar a marcação. É exatamente assim que admins do Strapi, Directus, Payload e a maioria das plataformas low-code empresariais funcionam por baixo dos panos.
O gerador acima recebe um array simples de campos e produz HTML pronto. Em produção, você normalmente combina isso com um JSON Schema completo e uma biblioteca como react-jsonschema-form, uniforms ou JSONForms para ganhar validação, campos condicionais e tematização de graça. Adiante, os padrões, bibliotecas e trade-offs.
JSON Schema como fonte da verdade
JSON Schema é o vocabulário padrão IETF para descrever dados JSON. Um schema especifica tipos permitidos, intervalos, propriedades obrigatórias, padrões regex, valores de enum, formatos e lógica condicional — tudo que um formulário precisa para validar. Exemplo trivial:
{
"type": "object",
"properties": {
"nome": { "type": "string", "minLength": 2 },
"email": { "type": "string", "format": "email" },
"idade": { "type": "integer", "minimum": 0, "maximum": 150 }
},
"required": ["nome", "email"]
}
O mesmo schema valida o payload no backend (Node com ajv, Python com jsonschema, Go com gojsonschema) e alimenta o formulário no frontend. Essa disciplina DRY é a feature matadora: as regras de validação não podem divergir entre cliente e servidor porque são literalmente o mesmo documento.
Features do schema que controlam a UI
enum— renderiza como select/dropdown ou radio group.format: "email" | "uri" | "date" | "date-time"— escolhe o tipo de input certo e a validação HTML5.pattern— regex que o renderizador traduz em<input pattern="…">.minimum,maximum,minLength,maxLength— limites do input.oneOf/anyOf— radios, abas ou unions discriminadas.if/then/else— campos condicionais (mostrar "nome do cônjuge" só quando "casado" for true).type: "array", "items": {…}— grupo de campos repetitivo com botões adicionar/remover.
UI Schema: separando dados de apresentação
JSON Schema descreve os dados; deliberadamente não diz nada sobre widgets, ordem ou rótulos. A maioria das libs sobrepõe um UI Schema paralelo para controlar a apresentação:
// exemplo do react-jsonschema-form
const uiSchema = {
email: { "ui:widget": "email" },
bio: { "ui:widget": "textarea", "ui:options": { rows: 6 } },
senha: { "ui:widget": "password" },
oculto: { "ui:widget": "hidden" }
};
Essa separação mantém o schema de dados portátil (o mesmo schema vale para o form, o banco e a API) enquanto designers iteram na UI sem mexer na lógica de validação.
Bibliotecas para renderizar form a partir de schema
- react-jsonschema-form (Mozilla) — o renderizador React canônico. Maduro, tema para Bootstrap/Material/Tailwind, widgets customizáveis.
- uniforms — React, multi-schema (JSON Schema, GraphQL, Zod, SimpleSchema), forte em theming.
- JSONForms (Eclipse) — React e Angular, enterprise-friendly, UI Schema bem modelado.
- formily (Alibaba) — React/Vue, muito usado em ferramentas empresariais chinesas, dá conta de fluxos complexos.
- vue-form-generator / vue-jsonschema-form — contrapartes Vue.
- Survey.js — focado em pesquisas/quizzes, inclui builder visual de schema.
Engines de validação
Se você só precisa de validação sem renderização, as libs líderes são:
- ajv — validador JSON Schema mais rápido em JavaScript; compila schemas em funções otimizadas.
- zod — schema builder nativo de TypeScript; não é JSON Schema puro, mas interopera via
zod-to-json-schema. - yup, joi — validadores JS antigos, populares mas mais lentos; hoje mais legado.
- valibot — alternativa moderna e tree-shakeable ao zod.
Onde esse padrão brilha (e onde não)
Wins: admins de CRUD, telas de autoria de headless CMS, ferramentas internas, fluxos de pesquisa multi-step, admin baseado em OpenAPI quando o schema já existe. Limitações: UX altamente custom (combobox com busca assíncrona e avatares, wizards multi-step com dependências entre campos, landings de marketing dominadas pelo design). Quando o visual domina o formulário, JSX/componentes à mão continuam mais fáceis do que brigar com o renderizador.
FAQ
Posso estilizar a saída no meu design system? Sim — todas as libs maiores suportam widgets customizados e temas. Adapters para Tailwind, Material UI, Chakra e Ant Design existem.
Gera componente Vue, não React? Sim — vue-jsonschema-form e formily têm suporte first-class a Vue 3.
O mesmo schema valida no servidor? Sim — é justamente o ponto. Rode ajv no Node ou qualquer validador JSON Schema na sua linguagem de backend. Fonte única, sem drift de validação.
Como funcionam campos condicionais? Use if/then/else (Draft 7+) ou dependencies/dependentSchemas. O renderizador esconde ou mostra campos reativamente conforme os valores mudam.
Dá pra importar uma spec OpenAPI e gerar form? Sim — a seção components.schemas de OpenAPI 3 é JSON Schema. Mande para qualquer renderizador de form e tenha um admin contra sua API de cara.
Ferramentas Relacionadas
Schema MusicAlbum JSON-LD
Gera JSON-LD Schema.org MusicAlbum com nome, artista (byArtist), data de lançamento, gênero, gravadora e tracklist (itemListElement de MusicRecording com duração ISO 8601 PT3M42S).
Formulário Contato HTML
Gere o HTML de um formulário de contato com campos de nome, e-mail e mensagem, pronto para colar no seu site. Copie o código e conecte ao seu backend.
Gerador de Mongoose model a partir de coleção
Gere um Schema e model do Mongoose (JS) com campos básicos e timestamps a partir do nome de uma coleção. Acelere a modelagem do MongoDB no seu projeto Node.js.