Как определить схему json по правилам для элементов в коде python? - PullRequest
0 голосов
/ 05 февраля 2020

Я нахожусь в процессе определения схемы 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
        }
      }
    }
  }
}

...