Інструмент для створення схеми 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?


Але як би інструмент знав, що це не загальна карта від рядків до рядків?
hmakholm залишився над Монікою

1
У наданому прикладі я б сказав, що зрозуміло, що у нас є словник (термінологія python) з парами ключ-значення, де значення бувають рядками. Я не знаю жодної іншої схеми JSON, яка б описувала ті самі дані. І це лише простий приклад: це, звичайно, може стати набагато складнішим, як зазначено в проекті схеми JSON.
blueFast

3
Отже, ви стверджуєте, що "відображення від довільних рядків до інших довільних рядків" (наприклад, зіставлення з імен файлів на описи вмісту) не може бути виражене як схема JSON? Наскільки я знаю, це може бути правдою, але це зробить подібні схеми досить корисними на мій погляд.
hmakholm залишився над Монікою

1
Мммм, я не впевнений, що ми обговорюємо щось важливе для цього питання, але все одно. Давайте скористаємося кращим прикладом: наявність фіксованих ключів у даних JSON, безумовно, корисно, якщо ці дані JSON, наприклад, описують властивості людини. Замість "foo" та "bar" подумайте про "ім'я" та "прізвище". "ім'я" та "прізвище" є чітко фіксованими властивостями даних JSON особи, тому вони не є довільними рядками: вони є частиною схеми особи. Значення, звичайно, довільні, тому вони не є частиною схеми.
blueFast

3
Закріплені клавіші - це те, що ви хочете, а іноді - ні. У цьому і полягає вся справа в тому, що автоматичний інструмент не зможе виявити з одного зразка, який із потрібних варіантів.
hmakholm залишився над Монікою

Відповіді:


92

Ви можете шукати це:

http://www.jsonschema.net

Це онлайн-інструмент, який може автоматично генерувати схему JSON із рядка JSON. І ви можете легко редагувати схему.


3
Легке та зручне місце для початку. Але зауважте, що повідомляються про проблеми з jsonschema.net, визначені в інших місцях на цій сторінці, та причини, які обговорюються для того, щоб бажати відключити інструмент, або принаймні доступний для API інструмент, включити до робочих процесів розробки, дозволити оновлення схем з пізнішим прикладом тощо. список варіантів Стіва Беннета.
nealmcb

Зауважте, що цей сайт видасть несподівані помилки під час редагування схеми після початкового імпорту.
Кореус

1
Збою за щось на зразок, {"hello": "world","num": 42}але виглядає багатообіцяючим
DBX12

3
Старі сайти, безумовно, були недостатньо хорошими. JSONSchema.Net тепер переписаний. Це набагато надійніше. Якщо у вас є якісь проблеми, повідомте про них на GitHub, і я з радістю виправлю
Джек

jsonschema2pojo.org - це те, що я використовую роками
хтось десь

83

Узагальнюючи інші відповіді, ось запропоновані до цього часу генератори схем JSON:

Онлайн:

Пітон:

NodeJS:

Ruby:


jskeetor - ніsetup.py
Att Righ

Якийсь шанс ви знаєте, чи підтримує будь-який із цих даних YAML? Ми могли б конвертувати, але лише додатковий крок.
DylanYoung

28

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

(Повне розкриття: я автор.)


1
Гарна робота, чоловіче! Я шкодую, що не знайшов цього, перш ніж почав працювати над скинфер: github.com/scrapinghub/skinfer
Elias Dorneles

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
В основному проблема з цим інструментом полягає в тому, що це онлайн- інструмент. Мені це потрібно для запуску локально в моєму середовищі розробки, іноді автоматично, як частина інших завдань. Інструмент «копіювати тут, вставити туди» мені не допомагає. Якби він мав API REST, це було б досить добре.
blueFast

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


5

generate-schema( НПМ | Github ) приймає об'єкт JSON, генерує з нього схеми, один вихід - схема JSON, він написаний на Node.js і постачається з інструментом REPL і ClI для підключення файлів до.

Повне розкриття: Я автор :)


Будь-які плани оновити модуль до проекту 4+? Додавання min, max attrs, посилань тощо? Дякую за інструмент btw :) Буде використовувати його в моєму проекті
містер

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-схема-генератор - це акуратний генератор схем JSON на основі Ruby. Він підтримує проект 3 і 4 схеми JSON. Вона може бути запущена як окремий виконуваний файл, або вбудована всередину сценарію Ruby.

Тоді ви можете використовувати json-схему для перевірки зразків JSON щодо вашої щойно створеної схеми, якщо хочете.


3

Для офлайн-інструментів, які підтримують декілька входів, найкраще, що я бачив дотепер, це https://github.com/wolverdude/GenSON/ Я хотів би побачити інструмент, який приймає назви файлів зі стандартного вводу, оскільки у мене тисячі файлів . Однак у мене не вистачає відкритих дескрипторів файлів, тому переконайтеся, що файли закриті . Я також хотів би бачити генератори схеми JSON, які працюють з рекурсією. Зараз я працюю над створенням класів 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.