簡體   English   中英

JSON 架構:如果未在屬性中定義,則忽略必需的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM