Инструмент для создания схемы JSON из данных JSON

У нас есть эта json-схема draft. Я хотел бы получить образец данных JSON и создать скелет для схемы JSON, который я могу переработать вручную, добавив такие вещи, как описание, требуемое и т.д., Которые не могут быть выведены из конкретных примеров.

Например, из моего ввода example.json:

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

Я запустил бы свой инструмент json_schema_generator и получил бы:

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

Этот пример был закодирован вручную, поэтому возможны ошибки. Есть ли какой-нибудь инструмент, который мог бы помочь мне с преобразованием схемы JSON → JSON?

Ответ 1

Увидев, что в этом вопросе появляются довольно интересные слова, я добавляю новую информацию (я не уверен, что это ново, но я не мог найти ее в то время)

Ответ 2

Возможно, вы ищете следующее:

http://www.jsonschema.net

Это онлайн-инструмент, который может автоматически генерировать JSON-схему из строки JSON. И вы можете легко редактировать схему.

Ответ 3

Подводя итог другим ответам, вот генераторы схемы JSON, предложенные до сих пор:

Онлайн:

Python:

NodeJS:

Рубин:

Ответ 4

GenSON (PyPI | Github) - это новый генератор схемы JSON, который может генерировать одна схема из нескольких объектов. Вы также можете объединить схемы с ним. Он написан на Python и поставляется с инструментом CLI.

(Полное раскрытие: я автор.)

Ответ 5

Через несколько месяцев лучший ответ у меня есть мой простой инструмент. Он является сырым, но функциональным.

Я хочу что-то подобное this. Данные JSON могут предоставить скелет для схемы JSON. Я еще не реализовал его, но в качестве основы можно предоставить существующую схему JSON, так что существующая схема JSON плюс данные JSON могут генерировать обновленную схему JSON. Если такая схема не указана в качестве входных данных, принимаются значения по умолчанию.

Это было бы очень полезно при итеративном развитии: при первом запуске инструмента схема JSON является фиктивной, но она может быть уточнена автоматически в соответствии с эволюцией данных.

Ответ 7

generate-schema (NPM Github) принимает объект JSON, генерирует из него схемы, один вывод - JSON Schema, он написан в Node.js и поставляется с инструментом REPL и ClI для вводов файлов.

Полное раскрытие: я автор:)

Ответ 8

json-schema-generator - это аккуратный генератор схем JSON на основе Ruby. Он поддерживает как проекты 3, так и 4 схемы JSON. Его можно запустить как автономный исполняемый файл, либо он может быть встроен в Ruby script.

Затем вы можете использовать json-schema для проверки образцов JSON против вашей вновь созданной схемы, если хотите.

Ответ 9

Вот инструмент nodejs, который поддерживает json-схему v4 в https://github.com/krg7880/json-schema-generator

Он работает либо как инструмент командной строки, либо как библиотека nodejs:

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

schemaObj = jsonSchemaGenerator(json);

Ответ 10

Существует много упоминаемых инструментов, но еще один названный JSON Schema inferencer для записи:

https://github.com/rnd0101/json_schema_inferencer

(это не библиотека или продукт, а Python script)

С обычным полным раскрытием: я автор.

Ответ 11

Для автономных инструментов, поддерживающих несколько входов, лучшее, что я видел до сих пор, https://github.com/wolverdude/GenSON/ Я бы хотел увидеть инструмент, который принимает имена файлов на стандартном вводе, потому что у меня есть тысячи файлов. Однако у меня заканчиваются дескрипторы открытых файлов, поэтому убедитесь, что файлы закрыты. Я также хотел бы видеть генераторы JSON Schema, которые обрабатывают рекурсию. Теперь я работаю над созданием классов Java из объектов JSON в надежде перейти к JSON Schema из моих классов Java. Вот мой GenSON script, если вам интересно или хотите идентифицировать ошибки в нем.

#!/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 

Ответ 13

Существует также skinfer, который может выводить схему из списка образцов, определяя, какие поля являются необязательными. Он также может объединять схемы.

Его можно использовать как script или как библиотеку Python, см. более: https://skinfer.readthedocs.org