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?
- Cole ou digite um documento JSON de exemplo na caixa de entrada. Nada é executado enquanto você digita.
- Escolha a indentação (“2 espaços” ou “4 espaços”) e aperte “Gerar”.
- 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.
- 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.