JSON模式定义了两种类型:
型A型
{
"type": "object",
"properties": {
"a": { "type": "string" }
}
}X型
{
"type": "object",
"properties": {
"x": { "type": "string" }
}
}我想要创建一个结合A和X的模式,但是不需要额外的属性。(只有属性'a‘和/或'x’应该存在)。我试图使用"allOf“,但不能对其他属性添加限制。如果我在A或X中加上"additionalProperties“,它就不能工作。
我该怎么处理?当然,我不想把A重复到X中
发布于 2022-09-25 12:44:05
您要寻找的是在unevaluatedProperties中可用的jsonschema 2019-09年以上特性。与仅涉及本地定义属性的additionalProperties不同,unevaluatedProperties跨子模式工作(但评估成本更高)。
图式
{
"anyOf": [
{
"type": "object",
"properties": {
"a": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"x": {
"type": "string"
}
}
}
],
"unevaluatedProperties": false
}允许
{
"a": "foo",
"x": "bar"
}但不允许
{
"a": "foo",
"x": "bar",
"t": "baz"
}如果您一直使用早期的jsonschema版本,则必须手动定义父模式中的子模式的属性,如下所示:
{
"anyOf": [
{
"type": "object",
"properties": {
"a": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"x": {
"type": "string"
}
}
}
],
"properties": {
"a": true,
"x": true
},
"additionalProperties": false
}https://stackoverflow.com/questions/73843324
复制相似问题