如何使用JSON Schema验证密钥的字符串值?

时间:2018-02-01 11:57:30

标签: json jsonschema json-schema-validator

我发现很难理解如何使用不同的验证集来验证不同类型的响应。我只是提供一个示例代码,然后尝试解释它可能有意义。

示例数据集:

responses: [
   { type: 'user', age: 5 }
   { type: 'admi', auth: {...} }
]

json架构示例:

{
    "definitions": {
        "user": {
            "type": "object",
            "properties": {
                "type": { "type": "string" },
                "age": { "type": "number" }
            }
            "required": ["age"]
        },
        "admin": {
            "type": "object",
            "properties": {
                "type": { "type": "string" },
                "auth": { "type": "object" }
            }
            "required": ["auth"]
        }
    },
  "responses": {
    "type": "array",
    "anyOf": [
      { "$ref": "#/definitions/user" }
      { "$ref": "#/definitions/admi" }
    ]
  }
}

如何根据类型(不是string, number,而是'user', 'admi')验证这些内容?

1 个答案:

答案 0 :(得分:1)

您正在寻找适用于字符串或实例中任何类型的验证关键字。在最新版本的JSON Schema中,您可以找到const

您可以为用户定义添加以下const关键字...

...
    "user": {
        "type": "object",
        "properties": {
            "type": { "type": "string", "const": "user" },
            "age": { "type": "number" }
        }
        "required": ["age"]
    },
...

如果您无法使用const,因为您需要使用旧版本的JSON Schema,那么您可以使用enum,这实际上就是sam,但是您需要将字符串包含在内#&# 34;用户"在数组内部作为enum关键字的值。