IBAN
アカウント番号(この場合はaBIC
が必要)、またはそのaccount_number
両方を持つことができるJSONがあります。
したがって、これは有効です(のみaccount_number
):
"bankaccount_data": [
{
"bic": null,
"iban": null,
"account_name": "Bankgiro",
"account_number": "12345-6789",
"bank_name": "Bankgiro",
"type": "Bankgiro"
}
]
そして、これはと有効であるiban
とbic
:
"bankaccount_data": [
{
"bic": "BANKBIC",
"iban": "SE0123456789",
"account_name": "Bankgiro",
"account_number": null,
"bank_name": "Bankgiro",
"type": "Bankgiro"
}
]
でも、この両方を持つaccount_number
とiban/bic
:
"bankaccount_data": [
{
"bic": "BANKBIC",
"iban": "SE0123456789",
"account_name": "Bankgiro",
"account_number": "12345-6789",
"bank_name": "Bankgiro",
"type": "Bankgiro"
}
]
私の問題は、両方を要求することiban
とbic
、どちらかまたは両方が存在するかどうかです。私はそれを行っていないこのスキーマを持っていますが、私の必要性を「説明」する必要があります。
"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" ]
}
]
}
]
}
よくわかりませんでしたが、存在するiban
かどうかを尋ねていると思いますがbic
、もう一方も存在する必要があります。
あなたはここで正しい考えを持っていました。ただし、値が単に存在しないのではなくnullになる可能性があるため、複雑になります。
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]
iban
bic
anyOf
JSONスキーマは制約ベースであるため、表現されていないものはすべて許可されます。
上記で提供したソリューションでは、の各スキーマがanyOf
必要な条件を完全にチェックします。
あなたの例では、draft-07ではdraft-04と同じように機能するため、デモは同じです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加