如何使用JSON Schema实现字符串类型最小4096无上限的校验需求
JSON Schema字符串数值校验实现方案
你现有写法无法生效有两个原因:
- JSON Schema中的
minimum关键字仅对number/integer类型生效,对string类型无校验作用 - 你的待校验实例是包含
value字段的对象,但schema直接定义为字符串类型,结构不匹配,无法命中对应字段的校验规则
方案1:数值类型校验(最推荐)
如果业务允许待校验字段存储为数值类型,直接用原生minimum关键字实现,逻辑最简单易维护:
from jsonschema import validate import jsonschema def validate_value(json_data): json_schema = { "type": "object", "properties": { "value": { "type": "integer", "minimum": 4096 } }, "required": ["value"] } try: validate(instance=json_data, schema=json_schema) return True except jsonschema.ValidationError: return False
方案2:字符串类型正则校验(必须保留字符串格式时使用)
如果要求字段必须为字符串类型,可通过正则匹配实现>=4096的正整数校验,无上限限制,正则规则拆分逻辑:
- 4位数字场景:匹配4096~9999范围
- 5位及以上数字场景:所有正整数都大于4096,直接匹配即可
完整实现代码:
from jsonschema import validate import jsonschema def validate_value(json_data): json_schema = { "type": "object", "properties": { "value": { "type": "string", # 匹配所有>=4096的正整数字符串,无长度上限 "pattern": r"^(4[1-9]\d{2}|409[6-9]|[5-9]\d{3}|[1-9]\d{4,})$" } }, "required": ["value"] } try: validate(instance=json_data, schema=json_schema) return True except jsonschema.ValidationError: return False # 测试用例 # print(validate_value({"value": "4096"})) # 返回True # print(validate_value({"value": "4095"})) # 返回False # print(validate_value({"value": "9999"})) # 返回True # print(validate_value({"value": "123456789"})) # 返回True
注意事项
- 上述正则仅适配正整数场景,如果需要支持小数、负数等格式,可根据业务规则调整正则表达式
- 正则校验的性能和可维护性低于原生数值校验,非必要场景优先选择方案1
内容的提问来源于stack exchange,提问作者blowtorch
相关产品推荐
相关产品推荐

