Converter JSON em JSON Schema — Numio
Infere um JSON Schema (draft-07) a partir de uma amostra JSON. Em arrays de objetos, todos os elementos são mesclados: uma chave ausente ou null em alguns elementos fica fora de required.
Criar um primeiro schema de validação para uma resposta de API ou o payload de um webhook a partir de exemplos capturados.
Quando usar
- Criar um primeiro schema de validação para uma resposta de API ou o payload de um webhook a partir de exemplos capturados.
- Gerar um schema para usar no Ajv, no OpenAPI ou em uma etapa de JSON Schema para TypeScript/Zod.
Como usar
- Cole uma amostra JSON no editor da esquerda (um array com vários registros gera listas required melhores) ou use o botão de carregar arquivo para abrir um arquivo UTF-8.
- Leia o schema: em um objeto único toda chave é obrigatória, e chaves ausentes ou null em alguns elementos do array são opcionais.
- Copie o schema e adicione as restrições que a amostra não consegue mostrar, como formatos, enums, integer e minimum.
Amostra JSON
[
{ "id": 1, "name": "Ada", "email": null },
{ "id": 2, "name": "Lin", "email": "lin@example.com" }
]JSON Schema (draft-07)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Generated schema for Root",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"required": [
"id",
"name"
]
}
}Detalhes e limitações
Números são sempre "type": "number"; integer, formatos (email, date-time), enums e patterns não são inferidos. O title é sempre "Generated schema for Root".
Um campo que é null em todos os lugares recebe um schema vazio {}. Um null ao lado de outros valores é tratado como opcional, não como tipo null.
Arrays de tipos mistos como [1, "x"] viram uma tupla (lista items com additionalItems: false); um array vazio gera items: {}.
Gerado no seu navegador pelo json_typegen compilado para WebAssembly. JSON inválido (incluindo vírgulas finais) mostra o erro de análise, e um valor simples como 42 é rejeitado porque não tem estrutura.
FAQ
Qual draft do JSON Schema é gerado?
Draft-07, declarado como "$schema": "http://json-schema.org/draft-07/schema#". Não há opção para escolher 2019-09 ou 2020-12.
Como os campos opcionais são detectados?
Somente entre elementos do mesmo array: uma chave ausente em alguns objetos, ou null em alguns, fica fora de required. Em um objeto único toda chave é obrigatória.
É possível converter um array JSON na raiz?
Sim. A raiz recebe "type": "array" e os elementos são mesclados em um único schema items, como no exemplo.