Ferramenta para gerar esquema JSON a partir de dados JSON [fechado]

178

Temos este rascunho de esquema json . Gostaria de obter uma amostra dos meus dados JSON e gerar um esqueleto para o esquema JSON, que eu possa refazer manualmente, adicionando itens como descrição, obrigatório, etc., que não podem ser inferidos a partir de exemplos específicos.

Por exemplo, da minha entrada example.json:

{
    "foo": "lorem", 
    "bar": "ipsum"
}

Eu executaria minha ferramenta json_schema_generator e obteria:

{ "foo": {
    "type" : "string",
    "required" : true,
    "description" : "unknown"
  },
  "bar": {
    "type" : "string",
    "required" : true,
    "description" : "unknown"
  }
}

Este exemplo foi codificado manualmente, portanto, talvez haja erros. Existe alguma ferramenta por aí que possa me ajudar com o esquema de conversão JSON -> JSON?

blueFast
fonte
Mas como a ferramenta saberia que não é um mapa genérico de cadeias para cadeias?
hmakholm deixou Monica em
1
No exemplo fornecido, eu diria que é claro que temos um dicionário (terminologia python), com pares de valores-chave, em que os valores são cadeias de caracteres. Não conheço outro esquema JSON que descreva os mesmos dados. E este é apenas um exemplo fácil: pode ficar muito mais complicado, é claro, conforme especificado no rascunho do esquema JSON.
blueFast
3
Então, você está afirmando que "o mapa de cadeias arbitrárias para outras cadeias arbitrárias" (como um mapeamento de nomes de arquivos para descrições do conteúdo) não pode ser expresso como um esquema JSON? Pelo que sei, isso pode ser verdade, mas tornaria esse tipo de esquema um pouco inútil em minha opinião.
hmakholm deixou Monica em
1
Mmmm, não tenho certeza se estamos discutindo algo relevante para a questão, mas de qualquer maneira. Vamos usar um exemplo melhor: ter chaves fixas nos dados JSON é definitivamente útil se esses dados JSON estiverem, por exemplo, descrevendo propriedades de uma pessoa. Em vez de "foo" e "bar", pense em "nome" e "sobrenome". "nome" e "sobrenome" são propriedades claramente fixas dos dados JSON da pessoa, portanto, não são sequências arbitrárias: elas fazem parte do esquema da pessoa. Os valores são obviamente arbitrários, portanto não fazem parte do esquema.
precisa saber é o seguinte
3
Ter chaves fixas às vezes é o que você deseja e outras vezes não. Na verdade, esse é o ponto: não há como uma ferramenta automatizada detectar, em uma única amostra, qual das opções você deseja.
hmakholm deixou Monica em

Respostas:

92

Você pode estar procurando por isso:

http://www.jsonschema.net

É uma ferramenta online que pode gerar automaticamente o esquema JSON a partir da string JSON. E você pode editar o esquema facilmente.

Green Su
fonte
3
Um lugar fácil e prático para começar. Mas observe os problemas relatados com o jsonschema.net identificados em outras partes desta página e os motivos discutidos para a inclusão de uma ferramenta offline ou pelo menos acessível à API nos fluxos de trabalho de desenvolvimento, permitindo a atualização de esquemas com o exemplo posterior etc. lista de opções de Steve Bennett.
Nellmcb # 26/17
Observe que este site gerará erros inesperados ao editar o esquema após a importação inicial.
Coreus 13/11/19
1
Crashes para algo como {"hello": "world","num": 42}, mas parece promising-
DBX12
3
Os sites antigos definitivamente não eram bons o suficiente. JSONSchema.Net agora foi reescrito. É muito mais robusto. Se você tiver quaisquer problemas, por favor informe-los no GitHub e eu vou com prazer corrigi-los: github.com/jackwootton/json-schema
Jack
jsonschema2pojo.org é o que eu tenho usado há anos
Someone Somewhere
83

Resumindo as outras respostas, aqui estão os geradores de esquema JSON propostos até agora:

Conectados:

Pitão:

NodeJS:

Rubi:

Steve Bennett
fonte
jskemetor - nosetup.py
Att Righ
Alguma chance de você saber se algum desses suporta entradas YAML? Poderíamos converter, mas apenas um passo extra.
DylanYoung
28

GenSON ( PyPI | Github ) é um gerador de esquema JSON que pode gerar um único esquema a partir de vários objetos. Você também pode mesclar esquemas com ele. Está escrito em Python e vem com uma ferramenta CLI.

(Divulgação completa: sou o autor.)

wolverdude
fonte
1
Bom trabalho, cara! Lamento não encontrar este antes de começar a trabalhar em skinfer: github.com/scrapinghub/skinfer
Elias Dorneles
1
Não é um python, mas aqui está mais um github.com/snowplow/schema-guru
chuwy
1
Ótimo! Fiquei desapontado com o gerador de esquema on-line jsonschema.net (ele falha ao criar propriedades "necessárias" para a maioria dos objetos, não tem opções para produzir propriedades compactas (uma linha) ou omitir IDs e, o mais importante, gera um esquema que falha na validação dos dados usados ​​para criá-los para matrizes de esquema único). Ansioso para experimentar sua ferramenta.
Dave
@ Dave - também estou enfrentando problemas semelhantes com o json schema.net, essa ferramenta python ajudou?
Cshah
1
@Cshah: Estou extremamente impressionado com o GenSON e contribuí com um patch. Eu precisava gerar esquemas mais restritivos do que o autor estava acostumado, então criei uma versão com opções para gerar propriedades de padrão e AdditionalProperties / additionalItems para que os dados JSON não reconhecidos sejam sinalizados como necessitando de atenção.
21417 Dave
6

Depois de vários meses, a melhor resposta que tenho é minha ferramenta simples. É cru, mas funcional.

O que eu quero é algo semelhante a isso . Os dados JSON podem fornecer um esqueleto para o esquema JSON. Ainda não o implementei, mas deve ser possível fornecer um esquema JSON existente como base, para que o esquema JSON existente mais os dados JSON possam gerar um esquema JSON atualizado. Se nenhum esquema desse tipo for fornecido como entrada, serão adotados valores completamente padrão.

Isso seria muito útil no desenvolvimento iterativo: na primeira vez em que a ferramenta é executada, o esquema JSON é fictício, mas pode ser refinado automaticamente de acordo com a evolução dos dados.

blueFast
fonte
2
Curioso para saber como a sugestão de @Green Su não atendeu às suas necessidades. Eu acho que você está descrevendo um utilitário que fornece jumpstarter (seu termo é 'esquelético') - algo como um gerador de código de andaimes?
justSteve
13
Basicamente, o problema com essa ferramenta é que ela é uma ferramenta online . Preciso executá-lo localmente no meu ambiente de desenvolvimento, às vezes automaticamente como parte de outras tarefas. Uma ferramenta "copiar aqui, colar lá" não me ajuda. Se tivesse uma API REST, isso seria bom o suficiente.
precisa saber é o seguinte
2
@justSteve: a ferramenta online, além de usar um fluxo de trabalho de copiar e colar, ainda aparece com erros (quatro anos após a pergunta original). Eu tenho objetos json para os quais a ferramenta produz esquemas incorretos, mas ainda não os reduzimos a casos de teste mínimos para enviar como relatórios de erros.
21716 Dave Dave
5

Há uma ferramenta python para gerar o esquema JSON para um determinado JSON: https://github.com/perenecabuto/json_schema_generator

Vinícius Mendes
fonte
4
Isso é mantido desde 2013. Ele não suporta o Python 3. Além disso, ele suporta apenas um rascunho mais antigo, ou seja draft-03.
Acumenus 7/08
5

generate-schema( NPM | Github ) pega um objeto JSON gera esquemas a partir dele, uma saída é JSON Schema, é escrita no Node.js e vem com uma ferramenta REPL e ClI para a inserção de arquivos.

Divulgação completa: Eu sou o autor :)

Nijikokun
fonte
Algum plano para atualizar o módulo para redigir 4+? Adicionando min, max attrs, referências e assim por diante? Obrigado pela ferramenta btw :) Usá-lo-ei no meu projeto
Sr. Alien
5

Há uma ferramenta nodejs que suporta json schema v4 em https://github.com/krg7880/json-schema-generator

Funciona como uma ferramenta de linha de comando ou como uma biblioteca nodejs:

var jsonSchemaGenerator = require('json-schema-generator'),
    obj = { some: { object: true } },
    schemaObj;

schemaObj = jsonSchemaGenerator(json);
Johann Philipp Strathausen
fonte
1
Vem com uma CLI também!
precisa saber é o seguinte
3

json-schema-generator é um gerador de esquema JSON baseado em Ruby. Ele suporta os rascunhos 3 e 4 do esquema JSON. Ele pode ser executado como um executável independente ou pode ser incorporado dentro de um script Ruby.

Em seguida, você pode usar o json-schema para validar amostras JSON em relação ao seu esquema recém-gerado, se desejar.

HappyCoder86
fonte
3

Para as ferramentas offline que suportam várias entradas, o melhor que eu vi até agora é https://github.com/wolverdude/GenSON/ Gostaria de ver uma ferramenta que leva nomes de arquivos na entrada padrão, porque tenho milhares de arquivos . No entanto, os descritores de arquivos abertos acabam, portanto, verifique se os arquivos estão fechados . Eu também gostaria de ver geradores JSON Schema que lidam com recursão. Agora estou trabalhando na geração de classes Java a partir de objetos JSON na esperança de acessar o esquema JSON das minhas classes Java. Aqui está o meu script GenSON se você estiver curioso ou quiser identificar erros nele.

#!/bin/sh
ulimit -n 4096
rm x3d*json
cat /dev/null > x3d.json
find ~/Downloads/www.web3d.org/x3d/content/examples -name '*json' -      print| xargs node goodJSON.js | xargs python bin/genson.py -i 2 -s     x3d.json >> x3d.json
split -p '^{' x3d.json x3d.json
python bin/genson.py -i 2 -s x3d.jsonaa -s x3d.jsonab /Users/johncarlson/Downloads/www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter02-GeometryPrimitives/Box.json > x3dmerge.json 
John Carlson
fonte
Primeiro, você pode fornecer uma resposta para unix.stackexchange.com/questions/211803/… ?
21716 Dave Dave
2

Existem muitas ferramentas mencionadas, mas mais uma chamada inferencial de esquema JSON para o registro:

https://github.com/rnd0101/json_schema_inferencer

(não é uma biblioteca ou um produto, mas um script Python)

Com a habitual divulgação completa: sou o autor.

Roman Susi
fonte
1

Para node.js> 6.0.0, há também o módulo json-schema-by-example .

Jerome WAGNER
fonte