[英]JSON Schema: Ignore required property if not defined in properties
如果properties
定義中不存在所需的屬性,有什么方法可以忽略它?
例如:
{
"type": "object",
"properties": {
"billingAddress": {
"type": "string"
},
"isSameAsBillingAddress": {
"type": "boolean"
}
// Say I deleted the `mailingAddress` property
},
"required": [
"billingAddress",
"isSameAsBillingAddress",
"mailingAddress" // ignore
]
}
根據我的理解,這似乎是不可能的。 我知道這是一個愚蠢的問題,因為有人可能會說只是從required
的數組中刪除屬性名稱,但是當我生成這個 JSON 模式並且還想有條件地要求一個字段時,它變得有點復雜。如果它存在。
例如:
{
"type": "object",
"properties": {
"billingAddress": {
"type": "string"
},
"isSameAsBillingAddress": {
"type": "boolean"
}
// Delete `mailingAddress` property
},
"required": [
"billingAddress",
"isSameAsBillingAddress"
],
"oneOf": [
{
"properties": {
"isSameAsBillingAddress": {
"enum": [true]
}
}
},
{
"properties": {
"isSameAsBillingAddress": {
"enum": [false]
}
},
// Would like to ignore...
"required": ["mailingAddress"]
},
]
}
是的,如果mailingAddress
屬性被刪除,我可以將一些代碼寫回 go 並清理此架構,但我想知道是否有一些 JSON 架構方式智能地忽略未定義的properties
?
同樣從 JSON 模式生成器的角度來看,似乎有太多的地方可能隱藏着一個屬性名稱,所以任何關於如何在代碼可以輕松清理和生成連貫 JSON 模式的地方構建它的建議也將不勝感激。
這似乎更適合模式 linter —— 警告您缺少屬性定義並且可能被意外刪除。
你可以在這里找到一個 linter 列表——https://json-schema.org/implementations.html#schema-linter——如果這個檢查還沒有實現,它可能很容易做到。
不。 required
是有意獨立於properties
的。 required
驗證存在; properties
驗證子模式(如果存在)。
如果存在,則有條件地要求一個字段
我對這可能意味着什么感到困惑-感覺倒退到了required
的地步。 如果您只需要一個字段在它存在時就存在,那為什么還required
呢?
也許您只是想完全刪除required
的關鍵字?
所以我認為不應該忽略不在屬性中的必需屬性名稱。 見https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.4.3
在您的示例中 mailingAddress 必須存在,並且它的值可以是任何類型,因為 additionalProperties 默認為空 object 允許任何類型值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.