Json 架构是否允许 属性 的定义引用另一个 属性?
Does Json Schema allow a property's definition to reference another property?
我想创建一个 JSON 架构,根据另一个 属性 的值限制一个 属性 的值。
一个有效对象示例可能如下所示:
{
"lookup": {
"foo": "string",
"bar": "number",
},
// properties in `values` must exist in `lookup`
"values": {
// `foo` must be a string
"foo": "string is OK",
// `bar` must be a number
"bar": 100
}
}
这个想法是让架构强制两个属性之间的关系。
{
"type": "object",
"properties": {
"lookup" : {
"type": "object",
"additionalProperties" : {
"type": "string",
"enum": ["string", "number"]
}
},
"values": {
"type": "object",
// - this value's properties must exist in `lookup`
// - if the property in `lookup` is set to `string`, the type here must be `string`; if the property in `lookup` is set to `number`, the type here must be `number`
}
}
}
JSON 架构的标准规范不可能做到这一点。
在某些情况下这是可能的。虽然您不能将一段数据限制为从数据的其他部分获取的某些值(例如:使用 属性 X 来提供 属性 Y 可以具有的值列表),但您可以在架构的各个部分之间指定条件。
- 要求 1:此值的属性必须存在于
lookup
-> 不可能
- 要求2:如果
lookup
中的属性设置为string
,这里的类型必须是string
;如果lookup
中的属性设置为number
,这里的类型必须是number
-> possible
请参阅 https://json-schema.org/understanding-json-schema/reference/conditionals.html 了解可供您使用的各种选项。
我想创建一个 JSON 架构,根据另一个 属性 的值限制一个 属性 的值。
一个有效对象示例可能如下所示:
{
"lookup": {
"foo": "string",
"bar": "number",
},
// properties in `values` must exist in `lookup`
"values": {
// `foo` must be a string
"foo": "string is OK",
// `bar` must be a number
"bar": 100
}
}
这个想法是让架构强制两个属性之间的关系。
{
"type": "object",
"properties": {
"lookup" : {
"type": "object",
"additionalProperties" : {
"type": "string",
"enum": ["string", "number"]
}
},
"values": {
"type": "object",
// - this value's properties must exist in `lookup`
// - if the property in `lookup` is set to `string`, the type here must be `string`; if the property in `lookup` is set to `number`, the type here must be `number`
}
}
}
JSON 架构的标准规范不可能做到这一点。
在某些情况下这是可能的。虽然您不能将一段数据限制为从数据的其他部分获取的某些值(例如:使用 属性 X 来提供 属性 Y 可以具有的值列表),但您可以在架构的各个部分之间指定条件。
- 要求 1:此值的属性必须存在于
lookup
-> 不可能 - 要求2:如果
lookup
中的属性设置为string
,这里的类型必须是string
;如果lookup
中的属性设置为number
,这里的类型必须是number
-> possible
请参阅 https://json-schema.org/understanding-json-schema/reference/conditionals.html 了解可供您使用的各种选项。