Ir para o conteúdo principal

JSON Schema Generator

Gere um JSON Schema a partir do JSON.

Entrada JSON

Lin 1, Col 1
JSON

Resultado

Seu resultado aparecerá aqui

Adicione JSON acima e escolha Gerar.

Adicione JSON à esquerda e escolha Gerar.

Aguardando entrada

2 espaços

Gere um JSON Schema (draft 2020-12) a partir de um JSON de exemplo, pronto para copiar e ajustar.

O que é o JSON Schema Generator?

O JSON Schema Generator é uma ferramenta online gratuita que lê um documento JSON de exemplo no seu navegador e escreve um JSON Schema (draft 2020-12) que o descreve: o tipo de cada valor, as propriedades de cada objeto, os itens de cada lista e quais propriedades são obrigatórias. É um ponto de partida para refinar, não um contrato pronto.

Use para começar um schema a partir de uma resposta de API ou de um arquivo de configuração reais, e depois refine-o à mão.

O que ela aceita

  • Qualquer valor JSON como exemplo: um objeto, uma lista ou um valor único.
  • O resultado é um schema do draft 2020-12 que começa com "$schema": "https://json-schema.org/draft/2020-12/schema".
  • type é um entre object, array, string, number, integer, boolean e null. Um número inteiro, como 7, é um integer, e um número com parte fracionária, como 9.5, é um number. Quando os dois aparecem no mesmo lugar, o tipo é number.
  • Um objeto recebe properties, uma para cada nome, e required, que lista os nomes presentes em todos os objetos vistos naquele lugar. Para um único objeto, são todos os nomes. required é omitido quando nenhum nome está em todos os objetos.
  • Uma lista recebe items, um único schema construído com todos os seus itens juntos. Os objetos de uma lista são reunidos: um nome só é obrigatório se estiver presente em todos eles. Uma lista vazia recebe {} como items.
  • Quando o mesmo lugar contém tipos diferentes de valor, type vira uma lista ordenada por nome, como ["integer", "null", "string"]. Quando inteiros e outros números se encontram, o tipo é apenas number.
  • O schema é escrito com a indentação que você escolher, 2 ou 4 espaços.

Bom saber

  • O schema descreve este único exemplo, então é um ponto de partida. Ele não sabe quais propriedades são opcionais, quais textos são datas ou e-mails, nem qual faixa um número pode ter: todo nome é obrigatório, a não ser que outro objeto do exemplo não o tenha, e nenhum format, pattern, minimum ou enum é acrescentado.
  • additionalProperties não é definido, então o schema aceita propriedades extras. Acrescente "additionalProperties": false você mesmo se quiser proibi-las.
  • Uma lista com vários objetos do mesmo tipo dá um schema mais útil que um único objeto: coloque alguns itens típicos no seu exemplo.
  • null em um exemplo dá o tipo null, não “um valor que pode faltar”. Se um campo pode ser um texto ou null, mostre os dois casos, por exemplo em dois itens de uma lista.
  • Um nome repetido dentro de um objeto, e uma string com um escape substituto (surrogate) sem par, são recusados em vez de adivinhados.

Como usar o JSON Schema Generator?

  1. Cole ou digite um documento JSON de exemplo na caixa de entrada. Nada é executado enquanto você digita.
  2. Escolha a indentação (“2 espaços” ou “4 espaços”) e aperte “Gerar”.
  3. Leia o schema ao lado da entrada. Se o exemplo não puder ser usado, a mensagem explica o motivo e informa a linha e a coluna.
  4. Aperte “Copiar” para colocar o schema na área de transferência, ou “Baixar” para salvá-lo como schema.json.

Exemplos

Um objeto com vários tipos de valores

Cole este exemplo e aperte “Gerar”. 7 é um integer e 9.5 é um number, a lista tags recebe items do tipo string, o objeto aninhado address recebe as suas próprias properties e required, e null dá o tipo null. Todo nome do exemplo entra em required, porque um único exemplo não mostra quais nomes são opcionais. O schema começa com uma linha $schema para o draft 2020-12.

{
  "id": 7,
  "name": "Ada",
  "active": true,
  "score": 9.5,
  "tags": [
    "math",
    "poetry"
  ],
  "address": {
    "city": "London"
  },
  "nickname": null
}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer"
    },
    "name": {
      "type": "string"
    },
    "active": {
      "type": "boolean"
    },
    "score": {
      "type": "number"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "address": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string"
        }
      },
      "required": [
        "city"
      ]
    },
    "nickname": {
      "type": "null"
    }
  },
  "required": [
    "id",
    "name",
    "active",
    "score",
    "tags",
    "address",
    "nickname"
  ]
}

Um nome repetido no exemplo

O nome “id” aparece duas vezes no mesmo objeto. A ferramenta recusa em vez de escolher um valor para descrever, e informa a linha e a coluna do nome.

{"id": 1, "id": 2}

Um objeto repete o nome de um membro. Cada programa decide qual valor vale, então esta ferramenta recusou em vez de manter um valor e descartar o outro. Deixe os nomes únicos e tente novamente.

Linha 1, coluna 2

Uma lista de objetos

O schema dos itens é construído com todos os objetos da lista juntos. id está nos dois, então é obrigatório; name está em apenas um, então é uma propriedade, mas não é obrigatória.

[{"id": 1, "name": "Ada"}, {"id": 2}]
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "integer"
      },
      "name": {
        "type": "string"
      }
    },
    "required": [
      "id"
    ]
  }
}

Listas com valores misturados ou sem itens

Em ids, um número inteiro e 2.5 são reunidos em um só tipo, number. Em mixed, três tipos de valor dão uma lista de tipos, ordenada por nome. A lista vazia não tem do que aprender, então os seus items são um schema vazio, {}, que aceita qualquer coisa.

{"ids": [1, 2.5], "mixed": [1, "a", null], "empty": []}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "ids": {
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "mixed": {
      "type": "array",
      "items": {
        "type": [
          "integer",
          "null",
          "string"
        ]
      }
    },
    "empty": {
      "type": "array",
      "items": {}
    }
  },
  "required": [
    "ids",
    "mixed",
    "empty"
  ]
}

Limites e privacidade

Limites de tamanho

  • Entrada: até 2.000.000 bytes de texto em UTF-8 (cerca de 2 MB). Letras acentuadas e emojis ocupam mais de um byte cada. Uma entrada maior é recusada.
  • Resultado: também até 2.000.000 bytes. Se o resultado completo fosse maior, a ferramenta mostra apenas uma prévia incompleta dos primeiros 100.000 bytes, e essa prévia não pode ser copiada nem baixada.
  • Aninhamento: até 256 níveis de objetos e listas dentro uns dos outros. Um JSON mais profundo é recusado porque passa do que a ferramenta processa.
  • Tempo: uma execução que demora mais que o seu limite de tempo é interrompida. Tente uma entrada menor.

Meu texto é enviado para um servidor?

Não. O texto que você digita ou cola, ou abre de um arquivo local, é processado localmente no seu navegador, em um Web Worker dedicado. Ele nunca é enviado para o servidor (um arquivo que você abre é lido apenas no seu navegador) e não é gravado em armazenamento, cookies nem na barra de endereços.

“Copiar” coloca o resultado na área de transferência e “Baixar” o salva como arquivo, mas só quando você aperta o botão. O arquivo é criado no seu navegador, então nada é enviado.

Para ver os detalhes completos, consulte a Política de Privacidade

Ferramentas e páginas relacionadas

O seu texto continua na página quando você troca de ferramenta na mesma aba, então dá para testar o mesmo texto em outra. Recarregar ou fechar a aba o encerra.

Todas as ferramentas