如何设置JSON Schema规则以确定其中一个属性必须设置并且是必需的?
我尝试了各种方法来解决它:
{
"id":"#",
"required":true,
"additionalProperties":true,
"type":"object",
"properties":{
"surname":{
"id":"surname",
"required":true,
"type":"string"
},
"oneOf":[
{
"$ref":"#/definitions/station_id"
},
{
"$ref":"#/definitions/station"
}
]
},
"definitions":{
"station_id":{
"type":"integer"
},
"station":{
"type":"string"
}
}
}
但它从未奏效。我需要做的是接受station_id什么是整数或者什么是字符串名称。
请问有办法吗?
答案 0 :(得分:21)
oneOf
仅在架构内直接使用时才是特殊的。当您在oneOf
内使用properties
时,它没有特殊含义,因此您实际上最终定义了一个名为"oneOf"
的属性。
此外 - 不是必需的属性定义,它是required
关键字。此关键字是必需属性的数组(不是布尔值,即旧语法)。
要执行您想要的操作,您需要制作一个oneOf
子句,其中一个选项需要"station_id"
,另一个选项需要"station"
:
{
"oneOf": [
{"required": ["station"]},
{"required": ["station_id"]}
]
}
如果两个都存在,那么数据将无效(因为只允许一个oneOf
条目通过)。