Я нахожусь в процессе определения схемы json, которая является довольно сложной и вложенной. Я планирую использовать несколько файлов схемы, чтобы обеспечить чистоту схемы и разбить ее по основным разделам, и использовать $ref
, чтобы объединить их все в один. Функции валидатора, которые у меня есть, уже могут справиться с этим, и я протестировал несколько примеров игрушечных схем меньшего размера.
У меня вопрос: у меня есть только один пример json, поэтому я не способен выводите схему только из примера, так как многие элементы имеют шаблоны регулярных выражений и условия min-max. У меня есть табличная карта всех элементов с их именем, типом, допустимыми диапазонами ... Я искал генераторы схем json (GenSON, jsonschema. net ...) из экземпляров данных и примеров.
В качестве примера рассмотрим приведенную ниже логику / правила для json элементов схемы:
Level Element Type ... Pattern ... (exclusive) min (exclusive) max default
1 VersionDate string ([0-9]{8})
1 Pairs array
2 a integer ... False 0 0
2 b number ... False 0.0 False 99.5 0
2 c number ... False 0.0 True 10000 0
То, что я хотел бы иметь, - это чистый способ анализа строк приведенной выше таблицы и добавить к объекту схемы json программным способом. Причина этого заключается в том, чтобы иметь воспроизводимый генератор схем, где я могу настраивать или перемещать объекты.
Буду признателен за любые подсказки / предложения.
{
"VersionDate": {
"$id": "#/properties/VersionDate",
"type": "string",
"title": "The Versiondate Schema",
"examples": [
"20160319"
],
"pattern": "^([0-9]{8})$"
},
"Pairs": {
"$id": "#/properties/Pairs",
"type": "array",
"title": "The PairsSchema",
"items": {
"$id": "#/properties/Pairs/items",
"type": "object",
"title": "The Items Schema",
"required": [
"a",
"b",
"c"
],
"properties": {
"a": {
"$id": "#/properties/Pairs/items/properties/a",
"type": "integer",
"title": "The a Schema",
"default": 0,
"examples": [
1234
],
"minimum": 0
},
"b": {
"$id": "#/properties/Pairs/items/properties/b",
"type": "number",
"title": "The b Schema",
"default": 0,
"examples": [
30.1
],
"minimum": 0,
"maximum": 99.5
},
"c": {
"$id": "#/properties/Pairs/items/properties/c",
"type": "number",
"title": "The c Schema",
"default": 0,
"examples": [
4.98
],
"minimum": 0,
"exclusivemaximum": 10000
}
}
}
}
}