我对jsonschema验证器的源代码有点怀疑:,我正在检查validators.py文件,发现我正在使用的函数:"def validator_for(模式,默认=_UNSET(:";通过JSON的错误进行验证,如下所示:
from jsonschema import validate
from jsonschema.validators import validator_for
def validator_schema():
sebas_schema = get_schema()
validator = validator_for(sebas_schema)(sebas_schema)
for error in validator.iter_errors(jsondata):
print(error)
validator = validator_schema()
这段代码在JSON文件中针对JSON模式进行迭代,以验证一个或多个键或值是否相同。因此,当收入JSON文件没有预期模式的一个键时,它会引发错误,但错误会在命令行与整个模式一起出现(我的模式有1000多行(,如下所示:
Output:
python3 schemas_valid.py
'cycle' is a required property
Failed validating 'required' in schema:
{'$schema': 'http://json-schema.org/draft-07/schema#',
'properties': {'assessmentId': {'type': 'string'},
'customData': {'properties': {'missingDocuments': {'items': {'properties': {'codeGroup': {'type': 'string'},
'documents': {'items': {'type': 'string'},
'type': 'array'},
'requires': {'type': 'number'}},
'required': ['codeGroup',
'documents',
'requires'],
'type': 'object'},
'type': 'array'}},
'required': ['missingDocuments'],
'type': 'object'},
'cycle': {'type': 'string'},
'iteration': {'type': 'string'},
'typeCall': {'type': 'string'}},
'required': ['typeCall',
'assessmentId',
'iteration',
'cycle',
'customData'],
'title': 'Generated schema for Root',
'type': 'object'}
On instance:
{'assessmentId': '123456',
'customData': {'missingDocuments': [{'codeGroup': 'string',
'documents': ['string'],
'requires': 0}]},
'iteration': '1',
'typeCall': 'ASSESSMENT'}
'cycle' is a required property
Failed validating 'required' in the schema:
(1000 plus of JSON schema lines comes here)
因此,我想问你们,输出错误消息是否可以在源代码中修改为只显示在命令行错误的第一行(仅缺少JSON密钥的名称(,如果可以,请指导我在哪里可以修改JSON验证器源代码(validators.py(中的错误消息
如果有任何帮助,我将不胜感激:(。
[SOLVED]:要只打印错误在模式中的错误消息,而不打印模式,只需在打印行添加属性:
for error in validator.iter_errors(jsondata):
print(error.message)
因此,error.message只会打印出架构出现问题的那一行。