Pular para o conteúdo

JSON para JSON Schema

JSON to JSON Schema

Infere um JSON Schema de um ou vários exemplos, unindo as formas que encontra.

Descreve um documento de exemplo como um JSON Schema (2020-12): tipos, propriedades, `required` e `$defs` aninhados para formas repetidas. Útil para um teste de contrato, um componente OpenAPI ou qualquer lugar em que um validador quer um esquema em vez de um exemplo.

🔒 Roda inteiramente no seu navegadorjson-schemajsoncodegenvalidation
Gerar

JSON de exemplo

Solte um arquivo .json

Lido nesta aba. Nada é enviado.

Dê todos os elementos que você tiver. Cada registro a mais estreita o palpite: um campo que falta em um deles é o que o torna opcional.

TypeScript

Como usar

  1. Cole todos os registros que você tiver

    Cada elemento de cada array é lido e mesclado, não só o primeiro. Três registros dizem muito mais do que um, porque um campo ausente em um deles é exatamente o que torna esse campo opcional.

  2. Dê nome ao tipo raiz

    Objetos aninhados recebem o nome da chave que os contém, no singular para arrays, então `users` produz um `User`. Só a raiz precisa de um nome seu.

  3. Leia as contagens abaixo da saída

    Tipos, campos opcionais, uniões e quantos registros foram mesclados. Uma contagem de uniões acima de zero significa que um campo teve dois tipos de valor diferentes na sua amostra — vale olhar antes de colar o resultado em uma base de código.

  4. Leve o esquema a um validador

    A saída carrega sua palavra-chave `$schema`, então pode ir direto para o validador de JSON Schema deste site ou para qualquer implementação de 2020-12.

Perguntas frequentes

Qual draft é este?

Draft 2020-12, declarado na palavra-chave `$schema`. Formas reutilizáveis vão em `$defs` e são referenciadas com `$ref`, que é a grafia desse draft; ferramentas de Draft-07 querem `definitions` e não vão resolver essas referências.

Por que nada é restringido além do tipo?

Nenhum `format`, `minLength`, `pattern` ou `enum` é emitido. Cada um deles seria inferido de um punhado de registros, e um esquema que rejeita dados válidos de produção é pior do que um que é apenas frouxo. Adicione as restrições que você consegue justificar de verdade.

`additionalProperties` é definido?

Fica aberto, o que significa que chaves extras validam. Fechá-lo transformaria cada campo que a API adicionar depois em uma falha de validação, e uma amostra não pode te dizer se a forma foi pensada para ser fechada.

Como ele decide o que entra em `required`?

Uma propriedade é obrigatória quando estava presente em todos os registros mesclados naquela forma. Cole um registro e tudo é obrigatório; cole cinco e o esquema começa a te dizer algo real.

Pode receber de

Em seguida

Estas aceitam o que esta ferramenta produz, então o resultado pode ir direto.