如何在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
相关产品推荐
相关产品推荐

