jsonschema字符串属性的多个值

时间:2014-10-23 15:51:16

标签: json validation jsonschema

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

一个例子:

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

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

  1. 特定日期格式
  2. 令牌{token}将被服务器端的特殊值替换
  3. 我已经看到了在这种情况下使用的oneOf属性,但只有format属性,因此我假设这是可能的,只是不确定如何使用实现它,例如它可能是这样的:

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

    对于如何实现这一目标的任何明确性都将非常感激,因为我对json模式的规范草案4或找到任何示例没有太多运气。

2 个答案:

答案 0 :(得分:29)

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

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

因此,要在您的示例中使用此功能,请尝试:

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

答案 1 :(得分:0)

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

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