jsonschema 字符串属性的多个值

标签 json validation jsonschema

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

一个例子:

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

在上面的示例中我希望能够做的是指定 $gte可以是一组特定的约束值中的任何一个。例如,这个特定的实现要求“$gte”的值被限制为以下之一:
  • 特定日期格式
  • 一个代币 {token}它在服务器端被替换为特殊值

  • 我见过 oneOf在这种情况下使用的属性,但仅限于 format属性,所以我假设这是可能的,只是不确定如何实现它的语法,例如它可能是这样的:
    {
        "type": "object",
        "properties": {
            "$gte": {
                "type": "string",
                "oneOf": [
                    {"pattern": "<some-pattern>"},
                    "{token}",
                    "{another_token}"
                ]
            }
        }
    }
    

    任何关于如何实现这一点的明确将不胜感激,因为我对 json 模式的规范草案 4 或在查找任何示例方面没有太多运气。

    最佳答案

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

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

    因此,为了适合您的示例,请尝试:
    {
        "type": "object",
        "properties": {
            "$gte": {
                "type": "string",
                "oneOf": [
                    {"pattern": "<some-pattern>"},
                    {"enum": ["TOKEN", "ANOTHER_TOKEN"]}
                ]
            }
        }
    }
    

    关于jsonschema 字符串属性的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26532137/

    相关文章:

    javascript - 使用 AJAX toast

    javascript - 动态添加多个字段的 Bootstrap 验证

    json - 如何将 $ref 与 json-schema 和顶级属性一起使用

    java - 使用 Spring 验证 boolean 元素是否已显式定义

    ruby-on-rails - ruby on rails 多参数属性如何*真正*工作(datetime_select)

    url - 如何使用 JSON 模式中的 URL URI 识别子模式?

    Json 架构验证 : do not allow fields other than those declared in schema

    来自对象数组的 Javascript/Lodash 深度比较对象

    ios - 如何快速访问嵌套 JSON 中的数据

    java - 我如何使用 Jackson 解析以下 JSON。为使用 Jackson ObjectMapper 创建的最相关的 java 对象是什么?