У меня есть схема JSON, с помощью которой я хочу проверить некоторые данные, используя python и модуль jsonschema.Тем не менее, это не совсем работает, как ожидалось, так как некоторые из принятых данных вообще не действительны (для меня и цели моего приложения).К сожалению, схема предоставлена, поэтому я не могу изменить саму схему - по крайней мере, не вручную.
Это сокращенная версия схемы ('schema.json' в приведенном ниже коде):
{
"type": "object",
"allOf": [
{
"type": "object",
"allOf": [
{
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"language": {
"type": "integer"
}
}
}
]
},
{
"type": "object",
"properties": {
"addressArray": {
"type": "array",
"items": {
"type": "object",
"properties": {
"streetNumber": {
"type": "string"
},
"street": {
"type": "string"
},
"city": {
"type": "string"
}
}
}
}
}
}
]
}
Это пример того, что должно быть допустимым экземпляром ('person.json' в приведенном ниже коде):
{
"firstName": "Sherlock",
"lastName": "Holmes",
"language": 1,
"addresses": [
{
"streetNumber": "221B",
"street": "Baker Street",
"city": "London"
}
]
}
Это пример того, что следует считать недействительным ('no_person.json 'в коде ниже):
{
"name": "eggs",
"colour": "white"
}
И этот код я использовал для проверки:
from json import load
from jsonschema import Draft7Validator, exceptions
with open('schema.json') as f:
schema = load(f)
with open('person.json') as f:
person = load(f)
with open('no_person.json') as f:
no_person = load(f)
validator = Draft7Validator(schema)
try:
validator.validate(person)
print("person.json is valid")
except exceptions.ValidationError:
print("person.json is invalid")
try:
validator.validate(no_person)
print("no_person.json is valid")
except exceptions.ValidationError:
print("no_person.json is invalid")
Результат:
person.json is valid
no_person.json is valid
Я ожидал, что no_person.json будет недействительным.Что можно сделать, чтобы только такие данные, как person.json, были успешно проверены?Большое спасибо за вашу помощь, я очень новичок в этом (потратил целую вечность в поисках ответа).