Сценарий: Я пытаюсь создать валидатор схемы JSON в python.В этом случае я создаю словарь, содержащий информацию, которая будет использоваться для проверки.
Код:
import json
import os
from pprint import pprint
from jsonschema import validate
from jsonschema import Draft4Validator
config_dir = r"D:\PROJECTS\etc"
config_file = r"schema.json"
schema = dict()
schema["$schema"] = "https://json-schema.org/schema#"
schema["title"] = "Index Schema"
schema["description"] = "Schema to describe calendar"
schema["type"] = "object"
# core
core = dict()
core["type"] = "object"
core["description"] = "Core settings for calendar"
core["frequency"] = {"type": "string",
"description": "Base frequency ",
"enum": ["monthly", "daily", "weekly"]} #problem1
core["mark"] = {
"type": "string",
"description": "Mask defining the months",
"if": {"core": {"frequency": {"enum": "monthly"}}}, #problem2
"then": {
"pattern": "[01]{12}",
"minLength": 12,
"maxLength": 12
}
}
core["ref_day"] = {"type": "string",
"description": "First day"
}
core["objective1"] = {"type": "object",
"description": "Information Calendar",
"properties": {"day": "string",
"holiday": "string",
"relative": {"unit": ["D", "M", ""],
"offset": "number"
}
}
}
core["objective2"] = {"type": "object",
"description": "Information Calendar 2",
"properties":{
"day": {
"type": "string",
"value": "string"
},
"holiday": "string",
"relative": {
"unit": ["D", "M", ""],
"offset": "number"
}
}
}
core["required"] = ["mark", "ref_day", "frequency", "objective1", "objective2"]
schema["core"] = core
# required
schema["required"] = ["core"]
config_file_path = os.path.join(config_dir, config_file)
with open(config_file_path, 'w') as f:
json.dump(schema, f, indent=4)
validation_result = Draft4Validator.check_schema(schema)
print(validation_result)
Проблема: Здесь я сталкиваюсь с 3 проблемами: Проблема 1: Можно ли создать список, в котором значение в JSON, которое должно быть проверено, должно быть в этом списке, в противном случае произойдет сбой?
Проблема 2: Можно ли использовать функцию if, как я написал в этом фрагменте?
Проблема 3: Возможно ли уменьшить вероятность ошибок?создать словарь следующим образом (?):
core["holidays"]["properties"]["default"] = {
"type": "object",
"description": "",
"properties":{
"ref",
"type",
"value"
}
}
core["holidays"]["properties"]["interim"] = {"interim": ""}
core["holidays"]["properties"]["selected"] = {"selection": {"ref": "default"}}
core["holidays"]["properties"]["exante"] = {"exante": {"ref": "default"}}
core["holidays"]["properties"]["expost"] = {"expost": {"ref": "default"}}
core["holidays"] = {"type": "object",
"description": "Holiday schedule",
"properties": {"default", "interim", "selected", "exante", "expost"}
}
Основной вопрос: Когда я запускаю первый фрагмент кода, я создаю словарь, и все это работает без потерьошибки, но когда я печатаю результат, я получаю none
, который, насколько я понимаю, указывает, что что-то не так.Что я здесь не так делаю?