Я пытаюсь проверить файл JSON, используя схему, указанную ниже, я могу ввести любые дополнительные поля, я не понимаю, что я делаю не так и почему, пожалуйста?
Образец JSON Данные
{
"npcs":
[
{
"id": 0,
"name": "Pilot Alpha",
"isNPC": true,
"race": "1e",
"testNotValid": false
},
{
"id": 1,
"name": "Pilot Beta",
"isNPC": true,
"race": 1
}
]
}
JSON Схема
Я установил "required" и "additionalProperties", поэтому я подумал, что проверка не удастся. ....
FileSchema = {
"definitions":
{
"NpcEntry":
{
"properties":
{
"id": { "type": "integer" },
"name": { "type" : "string" },
"isNPC": { "type": "boolean" },
"race": { "type" : "integer" }
},
"required": [ "id", "name", "isNPC", "race" ],
"additionalProperties": False
}
},
"type": "object",
"required": [ "npcs" ],
"additionalProperties": False,
"properties":
{
"npcs":
{
"type": "array",
"npcs": { "$ref": "#/definitions/NpcEntry" }
}
}
}
Файл и схема JSON обрабатываются с использованием пакета jsonschema для Python, (я использую python 3.7 на Ma c).
Метод, который я использую для чтения и проверки, приведен ниже. Я удалил большую часть общей проверки, чтобы сделать код максимально коротким и удобным для использования:
import json
import jsonschema
def _ReadJsonfile(self, filename, schemaSystem, fileType):
with open(filename) as fileHandle:
fileContents = fileHandle.read()
jsonData = json.loads(fileContents)
try:
jsonschema.validate(instance=jsonData, schema=schemaSystem)
except jsonschema.exceptions.ValidationError as ex:
print(f"JSON schema validation failed for file '{filename}'")
return None
return jsonData