Как отформатировать JSON схему для проверки - PullRequest
1 голос
/ 27 февраля 2020

Я пишу программу на Python / Flask и использую пакет под названием flask -jsonschema-validator для проверки JSON. Когда я проверяю свою JSON, я получаю следующую ошибку:

jsonschema.exceptions.SchemaError: [{'fieldname': {'type': 'string'}, 'type': {'type': 'string'}, 'description': {'type': 'string'}, 'default-value': {'type': 'string'}, 'validation': [{'type': 'string'}]}, {'fieldname': {'type': 'string'}, 'type': {'type': 'string'}, 'description': {'type': 'string'}, 'default-value': {'type': 'string'}, 'validation': [{'valid-values': {'type': 'string'}}, {'invalid-values': {'type': 'string'}}, {'isinteger': {'type': 'string'}}, {'nullable': {'type': 'string'}}]}] is not of type 'object', 'boolean'

Вот схема JSON, которую я использую

    {
    "validate": {
      "type": "object",
      "properties": {    
        "_id": { "type": "string", "minLength": 2, "maxLength": 100 },
        "name": { "type": "string", "minLength": 2, "maxLength": 100 },
        "type": { "type": "string", "minLength": 2, "maxLength": 100 },
        "subtype": { "type": "string", "minLength": 2, "maxLength": 100 },
        "domain-data-version": {"type": "string"},
        "description": { "type": "string", "minLength": 2, "maxLength": 100 },
        "created" : {"type": "string"},
        "owner-org": {"type": "string"},
        "domain-data":[
          {
           "fieldname": {"type": "string"},
            "type": {"type": "string"},
            "description": {"type": "string"},
            "default-value": {"type": "string"},
            "validation": [{"type": "string"}]},
          {"fieldname": {"type": "string"},
            "type": {"type": "string"},
            "description": {"type": "string"},
            "default-value": {"type": "string"},
            "validation": [ {"valid-values": {"type": "string"}},
                            {"invalid-values": {"type": "string"}},
                            {"isinteger": {"type": "string"}},
                            {"nullable": {"type": "string"}}]
                      }]
      },
      "required": []
    }
  }

Вот JSON, которую я бы использовал

{"name": "PHARMACY-CLAIM", "type": "Pharmacy", "subtype": "Prescription Filled", "domain-data-version": "1", "domain-data": [{"fieldname": "claim-id", "type": "string", "description": "The Insurance claim ID", "default-value": "null", "validation": [{"nullable": "false"}]}, {"fieldname": "member-gen-key", "type": "string", "description": "The unique insurance Member ID", "default-value": "null", "validation": [{"nullable": "false"}]}, {"fieldname": "ndc", "type": "string", "description": "The National Drug Code value for the medication prescription filled.", "default-value": "null", "validation": [{"nullable": "false"}]}]}

Когда я удаляю "часть данных домена в схеме, JSON будет проверять. Я думаю, что проблема заключается в том факте, что данные-домианы - это массив объектов, но я Я не уверен, что с этим делать. Спасибо за помощь.

1 Ответ

0 голосов
/ 28 февраля 2020

Первый намек на то, что это ошибка SchemaError, что означает, что есть проблема с тем, как вы написали свою схему, валидатор даже не удосужился взглянуть на значение экземпляра.

Второй подсказкой является сообщение об ошибке, в котором указано значение свойства "domain-data" в вашей схеме, а затем указано ... is not of type 'object', 'boolean'. В то время как вы указали массив, JSON Схема допускает только схемы в качестве значений в ключевом слове «properties», для которого требуется объект (или логическое значение).

Решение состоит в том, чтобы исправить свойство «domain-data» в вашей схеме, чтобы быть действительной подсхемой.

Если вы хотите, чтобы свойство проверяло массивы, где все элементы следуют одной и той же схеме, используйте:

{ "type": "array", "items": {...} }

Если вы хотите массив чтобы быть кортежем, где разные позиции в массиве принимают разные схемы, используйте:

{ "type": "array", "items": [ {first}, {second}, ... ] }

Обратитесь к документации JSON Схемы о разнице между "items" и "AdditionalItems", если вы это сделаете.

...