【问题标题】:Json Schema minimum validator but for stringJson Schema 最小验证器,但用于字符串
【发布时间】:2021-09-15 17:41:33
【问题描述】:

使用:

from jsonschema import validate
import jsonschema

我正在尝试使用 json 模式验证字符串上没有上限的至少 4096。我看到正则表达式模式匹配可能是一种选择,但不确定如何在没有上限的情况下做到这一点。

json_data = {"value": "4096"}

# what i would like to do
json_schema = {"type": "string", "minimum": 4096}
try:
    validate(json_data, schema=json_schema)
    return True
except jsonschema.ValidationError:
    return False

非常感谢任何意见。如果需要其他信息,请发表评论。谢谢。

【问题讨论】:

  • 这个问题有足够的信息来给出答案。问题是关于 JSON Schema 的使用。鉴于上述问题,这里有一个明确的正确答案。我对为什么关闭它感到困惑,我现在无法回答。 (投票结束的任何人都可以解释一下吗?)

标签: python-3.x regex jsonschema json-schema-validator


【解决方案1】:

首先,您应该将值输入为int,而不是string
然后您正在检查整个 json 对象的架构,其中 value 是一个键/属性:

from jsonschema import validate
import jsonschema

json_data = {"value": 4096}

json_schema = {
    "type": "object",
    "properties": {
        "value": {
            "type": "number",
            "minimum": 4096
        }
    }
}
try:
    validate(json_data, schema=json_schema)
    print(True)
except jsonschema.ValidationError:
    print(False)

尝试使用值 = 4096 的上述代码

编辑:如果更改值的类型不是一个选项,您仍然可以使用正则表达式(在我看来更丑陋):

json_schema = {
    "type": "object",
    "properties": {
        "value": {
            "type": "string",
            "pattern": "^\d{5,}|[5-9]\d{3}|4[1-9]\d\d|409[6-9]$"
        }
    }
}

这假设您的字符串没有前导零,也没有分隔符(,....)。我们匹配以下内容:

  • \d{5,}:5 位或更多位 (>= 10000)
  • [5-9]\d{3}:5 到 9 后跟 3 位数字 (5000-9999)
  • 4[1-9]\d\d: 4100 到 4999
  • 409[6-9]: 4096 到 4099

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2021-04-14
    • 2018-11-22
    相关资源
    最近更新 更多