You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:01:00