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

如何在Python中使用不同JSON Schema校验二元数组的每个元素

实现方案

prefixItems失效大概率是未匹配JSON Schema规范版本,或是未指定对应版本的校验器,以下是可直接运行的实现:

步骤1:安装依赖

使用Python生态常用的jsonschema库完成校验:

pip install jsonschema>=4.0.0

步骤2:编写校验代码

prefixItems是JSON Schema Draft 2020-12版本新增的关键字,需要显式指定对应版本的校验器才能生效,示例代码如下:

from jsonschema import Draft202012Validator

# 定义校验规则
schema = {
    "type": "array",
    # 按数组位置匹配对应校验规则
    "prefixItems": [
        {"type": "number", "minimum": 20, "maximum": 23},
        {"type": "number", "minimum": 30, "maximum": 35}
    ],
    # 可选配置:不允许出现超出prefixItems定义数量的额外元素
    "items": False,
    # 可选配置:限制数组元素数量必须和prefixItems长度一致
    "minItems": 2,
    "maxItems": 2
}

# 待校验数组
test_array = [22, 33]

# 执行校验
validator = Draft202012Validator(schema)
errors = list(validator.iter_errors(test_array))

if errors:
    print("校验不通过,错误信息:")
    for err in errors:
        print(f"位置{err.path}:{err.message}")
else:
    print("校验通过")

兼容旧规范方案(Draft 7及更早版本)

如果你使用的jsonschema版本较低,不想升级到支持Draft 2020-12的版本,可以用旧版规范的items+additionalItems关键字实现相同效果:

from jsonschema import Draft7Validator

schema = {
    "type": "array",
    "items": [
        {"type": "number", "minimum": 20, "maximum": 23},
        {"type": "number", "minimum": 30, "maximum": 35}
    ],
    "additionalItems": False,
    "minItems": 2,
    "maxItems": 2
}

test_array = [22, 33]
validator = Draft7Validator(schema)
errors = list(validator.iter_errors(test_array))
# 后续校验逻辑和上文一致

校验结果说明

  • 输入[22,33]时会输出校验通过
  • 输入[24,33]时会提示位置0的数值超出最大值限制
  • 输入[22,36]时会提示位置1的数值超出最大值限制
  • 输入[22,33,44]时会提示不允许存在额外元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:39:02