Инструмент для генерации схемы JSON из данных JSON [закрыто]


178

У нас есть этот проект схемы JSON . Я хотел бы получить образец моих данных 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
В представленном примере я бы сказал, что ясно, что у нас есть словарь (терминология Python) с парами ключ-значение, где значения оказываются строками. Я не знаю никакой другой схемы JSON, которая описывала бы те же данные. И это просто простой пример: конечно, это может быть намного сложнее, как указано в проекте схемы JSON.
BlueFast

3
Итак, вы утверждаете, что «сопоставление произвольных строк с другими произвольными строками» (например, сопоставление имен файлов с описаниями содержимого) не может быть выражено в виде схемы JSON? Насколько я знаю, это может быть правдой, но, по моему мнению, такие схемы станут бесполезными.
Хмакхольм покинул Монику

1
Мммм, я не уверен, что мы обсуждаем что-то относящееся к этому вопросу, но в любом случае. Давайте рассмотрим лучший пример: наличие фиксированных ключей в данных JSON определенно полезно, если эти данные JSON, например, описывают свойства человека. Вместо «foo» и «bar» подумайте о «имени» и «фамилии». «Имя» и «Фамилия» являются четко фиксированными свойствами данных JSON человека, поэтому они не являются произвольными строками: они являются частью схемы человека. Значения, конечно, произвольны, поэтому они не являются частью схемы.
BlueFast

3
Наличие фиксированных ключей - иногда то, что вы хотите, а иногда - нет. В этом-то и вся суть: автоматизированный инструмент не может из одной выборки определить, какой из вариантов вы хотите.
Хмакхольм покинул Монику

Ответы:


92

Возможно, вы ищете это:

http://www.jsonschema.net

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


3
Простое и удобное место для начала. Но обратите внимание, что сообщалось о проблемах с jsonschema.net, выявленных в других местах на этой странице, и о причинах, по которым обсуждается необходимость использования автономного или хотя бы доступного для API инструмента для включения в рабочие процессы разработки, возможность обновления схем с помощью более позднего примера и т. Д. См. Также список вариантов от Стива Беннетта.
nealmcb

Обратите внимание, что этот сайт будет выдавать неожиданные ошибки при редактировании схемы после первоначального импорта.
Coreus

1
Вылетает что-то вроде, {"hello": "world","num": 42}но выглядит многообещающе
DBX12,

3
Старые сайты были определенно недостаточно хороши. JSONSchema.Net был переписан. Это гораздо надежнее. Если у вас есть какие-либо проблемы, пожалуйста, сообщите о них на GitHub, и я с удовольствием их исправлю: github.com/jackwootton/json-schema
Джек,

jsonschema2pojo.org - это то, что я использую годами
кто-то где-то

83

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

В сети:

Python:

NodeJS:

Рубин:


jskemetor - нетsetup.py
Att Righ

Есть ли шанс, что вы знаете, поддерживает ли какой-либо из них вход YAML? Мы могли бы преобразовать, но только дополнительный шаг.
DylanYoung

28

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

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


1
Хорошая работа, чувак! Я сожалею, что не нашел этого до того, как начал работать над skinfer: github.com/scrapinghub/skinfer
Элиас Дорнелес,

1
Не питон, но вот еще один github.com/snowplow/schema-guru
chuwy

1
Большой! Я был разочарован онлайн-генератором схем jsonschema.net (он не может создать «обязательные» свойства для большинства объектов, не имеет опций для создания компактных (однострочных) свойств или пропустить идентификаторы, и, что наиболее важно, генерирует схему, которая не удается проверить данные, использованные для его создания для массивов с одной схемой). С нетерпением жду возможности попробовать ваш инструмент.
Дейв

@Dave - я тоже столкнулся с похожими проблемами с json schema.net, помог ли этот инструмент python?
Cshah

1
@Cshah: я очень впечатлен GenSON и добавил патч к нему. Мне нужно было создать более строгие схемы, чем автору было удобно, поэтому я разработал версию с опциями для генерации свойств шаблона и AdditionalProperties / AdditionalItems, чтобы нераспознанные данные JSON были помечены как требующие внимания.
Дейв

22

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


6

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

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

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


2
Любопытно, как предложение @Green Su не соответствовало вашим потребностям. Я думаю, что вы описываете утилиту, которая предоставляет Jumpstarter (ваш термин «скелет») - что-то вроде генератора кода скаффолдинга?
JustSteve

13
По сути, проблема с этим инструментом заключается в том, что это онлайн- инструмент. Мне нужно, чтобы он запускался локально в моей среде разработки, иногда автоматически, как часть других задач. Инструмент "скопировать сюда, вставить туда" мне не помогает. Если бы у него был REST API, этого было бы достаточно.
BlueFast

2
@justSteve: онлайн-инструмент, помимо использования рабочего процесса копирования-вставки, по-прежнему выглядит глючным (через 4 года после первоначального вопроса). У меня есть объекты json, для которых инструмент создает неправильные схемы, но я еще не сократил их до минимальных тестовых случаев для отправки в виде отчетов об ошибках.
Дейв


5

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

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


Есть ли планы обновить модуль до версии 4+? Добавление min, max attrs, ссылок и так далее? Спасибо за инструмент, кстати :) Будет использовать его в моем проекте
г-н Чужой

5

Существует инструмент 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);

1
Также поставляется с CLI!
Питер Ильфрич

3

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

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


3

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

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

Во-первых, можете ли вы дать ответ на unix.stackexchange.com/questions/211803/… ?
Дейв


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.