如何让jsonschema校验未识别字段时抛出异常?
JSON Schema校验未识别字段抛出异常的解决方案
Python的jsonschema库完全支持校验时对未识别字段抛出异常的需求,只需在Schema中添加additionalProperties: false关键字即可实现。
修改后的Schema示例
针对你提供的代码,需要在顶层对象和嵌套的value_c对象中分别添加"additionalProperties": false,确保所有未定义的字段都会被拦截:
import json from jsonschema import validate, ValidationError schema = { "type" : "object", "properties" : { "description" : {"type" : "string"}, "value_c" : { "type": "object", "properties": { "x": { "type": "string" }, "z": { "type": "string" } }, "required": ["x"], "maxProperties": 2, "additionalProperties": false # 限制value_c的未识别字段 } }, "required": ["description", "value_c"], "additionalProperties": false # 限制顶层对象的未识别字段 } my_json = json.loads('{"description": "Hello world!", "value_c": {"x": "5", "z222": "6" } }') try: validate(instance=my_json, schema=schema) except ValidationError as e: print(f"校验失败: {e.message}")
运行结果
执行上述代码后,会抛出ValidationError,提示Additional properties are not allowed ('z222' was unexpected),符合预期需求。
原理说明
additionalProperties是JSON Schema的标准关键字:
- 当设为
false时,对象中若存在properties里未定义的字段,校验直接失败; - 若需要允许部分特定的未识别字段,也可以将其设为另一个Schema(比如
{"type": "string"}),仅允许符合该Schema的额外字段。
内容的提问来源于stack exchange,提问作者JoyfulPanda
相关产品推荐
相关产品推荐

