JSONSchema - 如果 属性 为真 - 需要另一个字段
JSONSchema - if property is true - another field is required
我想创建一个模式,当它具有 属性 has_reference
时,字段 reference
存在(如果该字段不存在,则隐式为 false)。反之亦然。该架构还有其他字段 a
和 b
.
所以这是一个有效的实例:
{
"a": 1, "b": 2
}
{
"a": 1, "b": 2
"has_refernce": true, "reference": "bla"
}
但这无效:
{
"a": 1, "b": 2
"has_refernce": true
}
{
"a": 1, "b": 2
"refernce": "bla"
}
这可能吗?
编辑:我知道正确的设计是删除 "use_reference" 并使用 null "reference" 来指示引用是否存在,但我可以更改设计
如果您使用的是最新版本的架构,那么您可以利用以下 hack 来实现此目的 -
"dependencies": {
"has_refernce": [
"reference"
],
"reference": [
"has_refernce"
]
}
您还可以在模式中使用条件 -
"allOf" : [
{
"if": {
"properties": {
"has_refernce": {
"const": true
}
}
},
"then": {
"required": [
"reference"
]
}
}
]
如果你这样重写,添加"required"关键字会更容易:
{
"a": 1, "b": 2,
"ref" : {
"has_refernce": true,
"reference": "bla"
}
}
您可以尝试使用 "required" 关键字,但仅限于 "ref" 内的元素。您的架构将如下所示:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"a": {
"type": "integer"
},
"b": {
"type": "integer"
},
"ref": {
"type": "object",
"properties": {
"has_refernce": {
"type": "boolean"
},
"reference": {
"type": "string"
}
},
"required" : [ "has_refernce", "reference" ]
}
},
"required": [
"a",
"b"
]
}
所以只有 a 和 b 是必需的,但一旦 "ref" 被定义,"has"refernce" 和 "reference" 都将是必需的。
希望对您有所帮助。
我想创建一个模式,当它具有 属性 has_reference
时,字段 reference
存在(如果该字段不存在,则隐式为 false)。反之亦然。该架构还有其他字段 a
和 b
.
所以这是一个有效的实例:
{
"a": 1, "b": 2
}
{
"a": 1, "b": 2
"has_refernce": true, "reference": "bla"
}
但这无效:
{
"a": 1, "b": 2
"has_refernce": true
}
{
"a": 1, "b": 2
"refernce": "bla"
}
这可能吗?
编辑:我知道正确的设计是删除 "use_reference" 并使用 null "reference" 来指示引用是否存在,但我可以更改设计
如果您使用的是最新版本的架构,那么您可以利用以下 hack 来实现此目的 -
"dependencies": {
"has_refernce": [
"reference"
],
"reference": [
"has_refernce"
]
}
您还可以在模式中使用条件 -
"allOf" : [
{
"if": {
"properties": {
"has_refernce": {
"const": true
}
}
},
"then": {
"required": [
"reference"
]
}
}
]
如果你这样重写,添加"required"关键字会更容易:
{
"a": 1, "b": 2,
"ref" : {
"has_refernce": true,
"reference": "bla"
}
}
您可以尝试使用 "required" 关键字,但仅限于 "ref" 内的元素。您的架构将如下所示:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"a": {
"type": "integer"
},
"b": {
"type": "integer"
},
"ref": {
"type": "object",
"properties": {
"has_refernce": {
"type": "boolean"
},
"reference": {
"type": "string"
}
},
"required" : [ "has_refernce", "reference" ]
}
},
"required": [
"a",
"b"
]
}
所以只有 a 和 b 是必需的,但一旦 "ref" 被定义,"has"refernce" 和 "reference" 都将是必需的。
希望对您有所帮助。