Проверка JSON с атрибутом с именем «тип» - PullRequest
3 голосов
/ 15 мая 2019

Я пытаюсь утвердить JSON с форматом:

{"type": "mystring", "data": "mystring2"}

Используя этот код:

from jsonschema import validate

schema = {"type": "string", "data": "string"}
myjson = {"type": "mystring", "data": "mystring2"}

validate(myjson, schema)

И я получаю эту ошибку:

jsonschema.exceptions.ValidationError: {'type': 'mystring', 'data': 'mystring2'} is not of type 'string'

Failed validating 'type' in schema:

    {'data': 'string', 'type': 'string'}

On instance:
    {'data': 'mystring2', 'type': 'mystring'}

Похоже, что атрибут "type" зарезервирован для утверждения типа документа. Если я изменю атрибут "type" (из переменных схемы и myjson) для любой другой вещи, он будет работать нормально!

Есть ли способ установить атрибут с именем "type" с помощью jsonschema?

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Схема корневого объекта у меня сработала:

from jsonschema import validate

schema = {
    'type': 'object',
    'properties': {
        'data': { 'type': 'string' },
        'type': { 'type': 'string' }
    }
}

myjson = {'type': 'mystring', 'data': 'mystring2'}

validate(myjson, schema) # All good

Теперь давайте провалим:

myjson = {'type': 42, 'data': 'mystring2'}

validate(myjson, schema)

Failed validating 'type' in schema['properties']['type']:
    {'type': 'string'}

On instance['type']:
    42
1 голос
/ 15 мая 2019

Я сделал более простую версию, чтобы проиллюстрировать проблему. Ваш тип установлен неправильно.

from jsonschema import validate

schema = {"data": {"type" : "string"}} # define your key then its type
myjson = {"data": "mystring"} # your key, and its value

validate(myjson, schema) # validate

Используя ваши собственные данные

from jsonschema import validate

schema = { "data": {"type": "string"}}
myjson = {"type": "mystring", "data": "mystring2"}

validate(myjson, schema)

Чтение документов и игра на их примере - это всегда хорошая идея.

https://python -jsonschema.readthedocs.io / о / стабильный /

...