如果我有一个项目数组,并且这些项目共享一些属性并且也有不同的属性。
$switch
吗?我知道它在根级别外部使用,但有没有办法在属性中执行条件?我试图找到解决此问题的任何解决方案,但到目前为止似乎无法达成任何目标。
答案 0 :(得分:0)
关于properties
关键字中可以使用的内容:
"属性的价值"必须是一个对象。这个的每个值
对象必须是有效的JSON模式。
https://tools.ietf.org/html/draft-handrews-json-schema-validation-00#section-6.5.4
$switch
但是,它不是JSON Schema规范的一部分,所以虽然它在使用ajv时可能有效,但它可能不会为其他任何人工作。
此外,没有办法延长/补丁"不同的共同属性。如果您使用allOf
将一个对象与$ref
和另一个扩展架构一起使用,则可以使用KIND OF扩展属性。
答案 1 :(得分:0)
我最终设法做的事情如下:
items: {
type: 'object',
oneOf: [
{ $ref: '#/definitions/button' },
{ $ref: '#/definitions/select' },
],
properties: {
name: {
$ref:`${DEFINITIONS_SCHEMA}#/definitions/non_empty_string`,
// Normal object properties
},
}
}
properties
包含普通对象属性。 button
或select
中的定义均以如下属性开头:
button: {
properties:{
}
}
当符合架构时,现在将在项目内部有两个properties
对象。 AJV将它们合并为一个properties
对象,看起来好像都是从头开始写的。
我已经编写了测试以确认之前的内容。