Pular para o conteúdo

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.

JSON

JSON Schema

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

  1. 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.
  2. Leia o schema: em um objeto único toda chave é obrigatória, e chaves ausentes ou null em alguns elementos do array são opcionais.
  3. 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.

Especificações e referências