const personData= { name: null, email: 'test@gmail.com' } const schema = { instance: personData, schema: { type: "object", anyOf: [ { required: ["name", "email"] } ] } }
我想要一个模式,将验证对象和从对象的任何关键字值(名称或电子邮件),其中之一必须不为空。
yftpprvb1#
看起来你把“unfined”和“null”搞混了,这两者是截然不同的。(我现在已根据您对我的回答的评论编辑了您的问题。)
required关键字确保在适用的对象中“定义”了一个键。该值无关紧要,可以是null。
required
null
如果要定义属性的类型,则必须使用关键字type。
type
anyOf必须是架构数组,其中至少必须有一个为真。
anyOf
您已经在anyOf中定义了一个子模式,因此,作为一个整体,它必须为真,这使得required数组中的两个项都是必需的。
您希望在anyOf下定义多个模式,其中每个模式定义一个属性必须是特定类型(null是一种类型)。
{ "type": "object", "required": ["name", "email"], "anyOf": [ { "properties": { "name": { "type": "string" } } }, { "properties": { "email": { "type": "string" } } } ] }
vnzz0bqm2#
可以通过将‘Required’属性放在AnyOf列表下来解决此问题
{ "type": "object", "anyOf": [ { "required": ["name"], "properties": { "name": { "type": "string" } } }, { "required": ["email"], "properties": { "email": { "type": "string" } } } ] }
2条答案
按热度按时间yftpprvb1#
看起来你把“unfined”和“null”搞混了,这两者是截然不同的。(我现在已根据您对我的回答的评论编辑了您的问题。)
required
关键字确保在适用的对象中“定义”了一个键。该值无关紧要,可以是null
。如果要定义属性的类型,则必须使用关键字
type
。anyOf
必须是架构数组,其中至少必须有一个为真。您已经在
anyOf
中定义了一个子模式,因此,作为一个整体,它必须为真,这使得required
数组中的两个项都是必需的。您希望在
anyOf
下定义多个模式,其中每个模式定义一个属性必须是特定类型(null
是一种类型)。vnzz0bqm2#
可以通过将‘Required’属性放在AnyOf列表下来解决此问题