gpt4 book ai didi

jsonschema - JSON Schema (v04) anyOf 与依赖关系

转载 作者:行者123 更新时间:2023-12-04 04:09:09 26 4
gpt4 key购买 nike

我有一个 JSON,它可以有一个 IBAN 帐号,在这种情况下需要一个 BIC,或者一个 account_number 或两者都有

因此,这是有效的(仅 account_number):

"bankaccount_data": [
{
"bic": null,
"iban": null,
"account_name": "Bankgiro",
"account_number": "12345-6789",
"bank_name": "Bankgiro",
"type": "Bankgiro"
}
]

这对 ibanbic 有效:

"bankaccount_data": [
{
"bic": "BANKBIC",
"iban": "SE0123456789",
"account_name": "Bankgiro",
"account_number": null,
"bank_name": "Bankgiro",
"type": "Bankgiro"
}
]

即使是 account_numberiban/bic:

"bankaccount_data": [
{
"bic": "BANKBIC",
"iban": "SE0123456789",
"account_name": "Bankgiro",
"account_number": "12345-6789",
"bank_name": "Bankgiro",
"type": "Bankgiro"
}
]

我的问题是同时需要 ibanbic(如果存在的话)。我有这个模式,它没有这样做,但应该“说明”我的需要:

"bankaccount_data": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"account_name": { "type": "string" },
"bank_name": { "type": [ "string", "null" ] },
"type": { "type": "string" }
},
"required": [ "type" ],
"anyOf": [
{
"type": "object",
"properties": {
"bic": { "type": "string" },
"iban": { "type": "string" }
},
"required": [ "bic", "iban" ],
"dependencies": {
"iban": [
"bic"
],
"bic": [
"iban"
]
}
},
{
"type": "object",
"properties": {
"account_number": { "type": "string" }
},
"required": [ "account_number" ]
}
]
}
]
}

最佳答案

我不太确定,但我想你是在问,如果存在 ibanbic,那么另一个也必须存在。

您的想法很正确。然而,您的值可以为空而不是根本不存在这一事实使情况变得复杂。

dependencies 只检查属性是否存在,与它们的值无关。 null 仍然是一个值。 dependencies 在您的情况下无法帮助您,因为您总是希望对象中存在键。

首先让我们看看解决方案。

{
"anyOf": [
{
"properties": {
"bic": { "type": "string" },
"iban": { "type": "string" },
"account_number": { "enum": [null]}
},
"required": [
"iban",
"bic"
]
},
{
"required": [
"account_number"
],
"properties": {
"bic": { "enum": [null] },
"iban": { "enum": [null] },
"account_number": { "type": "string" }
}
}
]
}

https://jsonschema.dev/s/dg0CY

您需要这种重复的原因是您需要完整地表达您检查的条件。

anyOf 数组的值是子模式。这些值本身就是完整的模式。

anyOf 取值,anyOf[0] 确实表达了您正在寻找的约束,但是 anyOf[1] 什么也没说关于 ibanbic,因此“任何”模式都被认为是有效的。 anyOf 中的每个值都不知道彼此的内容;仅合并结果。

JSON Schema 是基于约束的,因此任何未表达的内容都是允许的。

在我上面提供的解决方案中,anyOf 中的每个模式都会完全检查所需的条件。

对于您的示例,它在 draft-07 中的工作方式与 draft-04 相同,因此演示是相同的。

关于jsonschema - JSON Schema (v04) anyOf 与依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62059542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com