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

如何使用JSON Schema实现字符串类型最小4096无上限的校验需求

JSON Schema字符串数值校验实现方案

你现有写法无法生效有两个原因:

  1. JSON Schema中的minimum关键字仅对number/integer类型生效,对string类型无校验作用
  2. 你的待校验实例是包含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:54:01