jsonschema не проверяет отсутствующие обязательные свойства - PullRequest
0 голосов
/ 25 марта 2020

Я знаю, что этот вопрос всплывает довольно часто, и я пытался исследовать проблему перед публикацией, но все еще не знаю, чего мне не хватает

У меня есть схема с вложенными объектами. Моя схема ожидает, что свойство company будет объектом. У этого объекта есть обязательные свойства, но они игнорируются. Почему он игнорирует обязательные свойства?

Схема:

{
        'business_type': {
            'type': 'string',
            "enum": ['company', 'non_profit']
        },
        'email': {
            'type': 'string'
        },
        'company': {
            'type': 'object',
            'properties': {
                'address': {
                    'type': 'object',
                    'properties': {
                        'city': {
                            'type': 'string',
                        },
                        'country': {
                            'type': 'string',
                            'enum': ['US']
                        },
                        'line1': {
                            'type': 'string'
                        },
                        'line2': {
                            'type': 'string'
                        },
                        'postal_code': {
                            'type': 'string'
                        },
                        'state': {
                            'type': 'string'
                        }
                    },
                    'required': ['city', 'country', 'line1', 'postal_code', 'state'],
                },
                'name': {
                    'type': 'string'
                },
                'phone': {
                    'type': 'string'
                }
            },
            'required': ['address', 'name', 'phone'],
        },
        'required' : ['business_type', 'email', 'company']
    }

Пример объекта, который не вызывает ошибку, но должен, потому что отсутствует свойство телефона

{
    "business_type": "company",
    "email": "email@email.com",
    "company": {
        "address": {
            "city": "city",
            "country": "US",
            "line1": "line1",
            "line2": "line2",
            "postal_code": "00000",
            "state": "AZ"
        },
        "name": "name"
    }
}

проверка корректно работает, если отсутствует пропущенный бизнес-тип, электронная почта или компания, поэтому она не проверяет вложенную структуру.

Полагаю, я что-то упускаю, просто не знаю, что это, я с видом

1 Ответ

1 голос
/ 25 марта 2020

Вам нужно заключить business_type, email и company в ключевое слово properties. В противном случае схема не считает их свойствами, просто дополнительные данные в схеме. JSON Схема будет игнорировать ключевые слова, которых она не знает.

Вы правильно в подсхеме company.

...