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

如何通过Python的jsonschema提取缺失必填键的ValidationError信息?

提取jsonschema验证中缺失的必填键信息

可以通过两种可靠方式提取缺失的必填键,无需依赖消息文本的临时方案:

方法1:利用ValidationError属性推导缺失字段

当验证失败原因是缺失必填字段时,ValidationError的validator属性值为"required",validator_value对应schema里的required字段列表,instance则是当前验证的JSON对象。通过对比必填列表与实例的键集合,即可找出缺失字段:

import jsonschema

schema = {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "email": {"type": "string"}
    },
    "required": ["name", "email"]
}

jsonToValidate = {"name": 1234}

validator = jsonschema.Draft202012Validator(schema)
errors = {}

for err in validator.iter_errors(jsonToValidate):
    if err.path:
        # 类型错误等有路径的问题,直接取路径首元素作为键
        key = err.path[0]
        errors[key] = err.message
    elif err.validator == "required":
        # 计算缺失的必填字段
        missing_fields = set(err.validator_value) - set(err.instance.keys())
        for field in missing_fields:
            errors[field] = f"'{field}' is a required property"

print(errors)

方法2:从错误消息中提取字段名

若确定错误消息格式固定,可使用正则表达式直接提取字段名,实现更简洁:

import jsonschema
import re

schema = {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "email": {"type": "string"}
    },
    "required": ["name", "email"]
}

jsonToValidate = {"name": 1234}

validator = jsonschema.Draft202012Validator(schema)
errors = {}
required_pattern = re.compile(r"'(\w+)' is a required property")

for err in validator.iter_errors(jsonToValidate):
    if err.path:
        key = err.path[0]
        errors[key] = err.message
    else:
        match = required_pattern.search(err.message)
        if match:
            key = match.group(1)
            errors[key] = err.message

print(errors)

两种方法运行后都会得到期望输出:

{
    "name": "1234 is not of type 'string'",
    "email": "'email' is a required property"
}

内容的提问来源于stack exchange,提问作者MrHutnik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:52:22