【问题标题】:jsonschema multiple values for string propertyjsonschema 字符串属性的多个值
【发布时间】:2014-10-23 15:51:16
【问题描述】:

我有一个 json 模式,它描述了一个相当复杂的 API 查询语法。一些属性是模式匹配的,但除了模式之外,还需要接受其他值(即其他显式字符串)。我似乎在众多 json 模式站点中的任何地方都找不到任何这样的例子。

一个例子:

{
    "type": "object",
    "properties": {
        "$gte": {
            "type": "string",
            "pattern": "<some-pattern>"
        }
    }
}

我希望在上面的示例中能够指定$gte 可以是一组特定的约束值中的任何一个。例如,此特定实现要求将“$gte”的值限制为以下之一:

  1. 特定的日期格式
  2. 令牌 {token} 在服务器端被替换为特殊值

我已经看到在这种情况下使用了oneOf 属性,但只使用了format 属性,所以我假设这是可能的,只是不确定如何实现它的语法,例如它可以是这样的:

{
    "type": "object",
    "properties": {
        "$gte": {
            "type": "string",
            "oneOf": [
                {"pattern": "<some-pattern>"},
                "{token}",
                "{another_token}"
            ]
        }
    }
}

如果我对 json 模式的规范草案 4 或在寻找任何示例方面没有太多运气,我将不胜感激。

【问题讨论】:

    标签: json validation jsonschema


    【解决方案1】:

    如果您希望数据是一组固定的精确值之一,您可以使用enum

    {
        "type": "string",
        "enum": ["stop", "go"]
    }
    

    因此,为了适应您的示例,请尝试:

    {
        "type": "object",
        "properties": {
            "$gte": {
                "type": "string",
                "oneOf": [
                    {"pattern": "<some-pattern>"},
                    {"enum": ["TOKEN", "ANOTHER_TOKEN"]}
                ]
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      除了已经说过的,对于日期,您可以在“oneOf”中使用“日期”

      https://json-schema.org/understanding-json-schema/reference/string.html#dates-and-times

      【讨论】:

        猜你喜欢
        • 2014-05-14
        • 1970-01-01
        • 1970-01-01
        • 2017-04-16
        • 2016-06-13
        • 1970-01-01
        • 2021-12-28
        • 2014-02-10
        • 2018-09-21
        相关资源
        最近更新 更多