如何使用JSON模式声明至少一个属性的模式不为空?

vwoqyblh  于 2022-09-21  发布在  Node.js
关注(0)|答案(2)|浏览(148)
const personData= {
  name: null,
  email: 'test@gmail.com'
}

const schema = {
  instance: personData,
  schema: {
    type: "object",
    anyOf: [
      { required: ["name", "email"] }
    ]
  }
}

我想要一个模式,将验证对象和从对象的任何关键字值(名称或电子邮件),其中之一必须不为空。

yftpprvb

yftpprvb1#

看起来你把“unfined”和“null”搞混了,这两者是截然不同的。(我现在已根据您对我的回答的评论编辑了您的问题。)

required关键字确保在适用的对象中“定义”了一个键。该值无关紧要,可以是null

如果要定义属性的类型,则必须使用关键字type

anyOf必须是架构数组,其中至少必须有一个为真。

您已经在anyOf中定义了一个子模式,因此,作为一个整体,它必须为真,这使得required数组中的两个项都是必需的。

您希望在anyOf下定义多个模式,其中每个模式定义一个属性必须是特定类型(null是一种类型)。

{
  "type": "object",
  "required": ["name", "email"],
  "anyOf": [
    {
      "properties": {
        "name": {
          "type": "string"
        }
      }
    }, {
      "properties": {
        "email": {
          "type": "string"
        }
      }
    }
  ]
}
vnzz0bqm

vnzz0bqm2#

可以通过将‘Required’属性放在AnyOf列表下来解决此问题

{
  "type": "object",
  "anyOf": [
    {
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string"
        }
      }
    }, {
      "required": ["email"],
      "properties": {
        "email": {
          "type": "string"
        }
      }
    }
  ]
}

相关问题