用特定值覆盖 "inherited" JSON 属性
Override a "inherited" JSON property with a specific value
考虑以下示例架构:
"Foo": {
"type": "object",
"properties": {
"num": {
"type": "integer",
"minimum": 1,
"maximum": 64
}
}
"Bla": {
"type": "object",
"properties": {
"base": {
"type": "object",
"allOf" : [
{"$ref": "#/definitions/Foo"},
{"num" : {"enum" : [64]} }
]
}
}
我想要实现的是将继承的 属性 "num" 的值限制为仅 64 而不是 1 到 64 之间的任何值。
有办法实现吗?
例如,我希望它验证:
"Bla" : {
"base" : {"num" : 64}
}
但不是这个
"Bla" : {
"base" : {"num" : 32}
}
为了完整起见,提供我之前的评论作为答案:
- 如果您将
”num”
包裹在 allOf
中,再包裹在另一个 properties
中,您应该已经实现了您想要的效果。
- 此外,您可能希望使用
"const": 64
而不是 "enum": [64]
– 以提高可读性。
- 如果您可以随意使用最新的 Draft 2019-09,您甚至可以避免使用
allOf
,因为 $ref
可以与其他关键字一起使用,结果如下:
{
"$schema": "https://json-schema.org/draft/2019-09/schema",
...
"$defs": {
"Foo": {
"type": "object",
"properties": {
"num": {
"type": "integer",
"minimum": 1,
"maximum": 64
}
}
},
"Bla": {
"type": "object",
"properties": {
"base": {
"$ref": "#/$defs/Foo",
"type": "object",
"properties": {
"num": {
"const" : 64
}
}
}
}
}
}
}
考虑以下示例架构:
"Foo": {
"type": "object",
"properties": {
"num": {
"type": "integer",
"minimum": 1,
"maximum": 64
}
}
"Bla": {
"type": "object",
"properties": {
"base": {
"type": "object",
"allOf" : [
{"$ref": "#/definitions/Foo"},
{"num" : {"enum" : [64]} }
]
}
}
我想要实现的是将继承的 属性 "num" 的值限制为仅 64 而不是 1 到 64 之间的任何值。
有办法实现吗?
例如,我希望它验证:
"Bla" : {
"base" : {"num" : 64}
}
但不是这个
"Bla" : {
"base" : {"num" : 32}
}
为了完整起见,提供我之前的评论作为答案:
- 如果您将
”num”
包裹在allOf
中,再包裹在另一个properties
中,您应该已经实现了您想要的效果。 - 此外,您可能希望使用
"const": 64
而不是"enum": [64]
– 以提高可读性。 - 如果您可以随意使用最新的 Draft 2019-09,您甚至可以避免使用
allOf
,因为$ref
可以与其他关键字一起使用,结果如下:
{
"$schema": "https://json-schema.org/draft/2019-09/schema",
...
"$defs": {
"Foo": {
"type": "object",
"properties": {
"num": {
"type": "integer",
"minimum": 1,
"maximum": 64
}
}
},
"Bla": {
"type": "object",
"properties": {
"base": {
"$ref": "#/$defs/Foo",
"type": "object",
"properties": {
"num": {
"const" : 64
}
}
}
}
}
}
}