如何让jsonschema使用false OR属性的布尔值

时间:2018-01-21 01:16:28

标签: jsonschema

我正在json架构中创建一个Avatar,在我的应用中,如果我们要隐藏头像,我们会将其传递为false,否则,一个头像会有一个图像和一个名。

在json架构中,我将头像指定为

const avatarSchema = {
    "type": ["object", "boolean"],
    "required": [],
    "additionalProperties": false,    
    "properties":{
       "name": {
           "type": "string"
        },
       "image": {
           "type": "string",
           "format": "url"
        }
    }
};

这不起作用,因为如果Avatar = true'image' does not exist on type 'Avatar'. Property 'image' does not exist on type 'true'.

我不希望每个Avatar truefalse{image, name},我如何告诉json架构以这种方式运行?

1 个答案:

答案 0 :(得分:2)

您对架构不起作用的原因的解释是不正确的。仅当验证的数据是对象时,requiredadditionalPropertiesproperties关键字才适用。因此,架构应该按照您的需要工作,除了它可以具有值“true”。

如果您使用的验证程序正在提供错误消息,例如问题中的错误消息,则表明它未正确验证。您应该为该验证器提交错误报告。

无论如何,问题的解决方案需要anyOf关键字。

{
  "anyOf": [
    { "enum": [false] },
    {
      "type": "object",
      "required": ["name", "image"],
      "additionalProperties": false,
      "properties": {
        "name": { "type": "string" },
        "image": {
          "type": "string",
          "format": "url"
        }
      }
    }
  ]
}