簡體   English   中英

JSON模式oneOf驗證

[英]JSON Schema oneOf validation

我正在嘗試創建一個JSON模式,該屬性將允許屬性為數字或特定格式的對象。

我的數據如下所示:

{
  "num": 200
}

我的架構如下所示:

{
  "properties": {
    "num": {
      "type": [
        "number",
        "object"
      ],
      "oneOf": [
        {
          "type": "number"
        },
        {
          "$ref": "#/definitions/Variable"
        }
      ]
    }
  },
  "required": [
    "num"
  ],
  "additionalProperties": false,
  "definitions": {
    "Variable": {
      "title": "Variable",
      "properties": {
        "$variable$": {
          "type": "boolean",
          "example": true
        },
        "name": {
          "type": "string"
        },
        "defaultValue": {
          "type": [
            "string",
            "object",
            "number"
          ]
        }
      },
      "required": [
        "$variable$",
        "name"
      ],
      "additionalProperties": false
    }
  }
}

當我在此處通過驗證器運行它時: https : //www.jsonschemavalidator.net/

我收到此錯誤:

Message: JSON is valid against more than one schema from 'oneOf'. Valid schema indexes: 0, 1.
Schema path: #/properties/num/oneOf

我假設我缺少有關oneOf工作原理的明顯信息,但是我無法弄清楚它可能是什么。 希望在這里提供任何幫助,謝謝!

您得到的錯誤是告訴您兩個oneOf模式都已驗證為true。 4對以下模式有效可能令人驚訝。

{
  "properties": {
    "foo": { "type": "string": }
  },
  "required": ["foo"]
}

事實證明,當值不是對象時, properties關鍵字和required關鍵字將不適用。 因此,當根據數字(或不是對象的任何東西)進行驗證時,上述模式實際上是空模式( {} )。 因為空模式意味着沒有約束,所以一切都是有效的。

要解決您的問題,只需在/definitions/Variable模式中添加"type": "object"

對於您的情況,您根本不需要oneOf,只需使用“ type”:[“ number”,{“ $ ref”:“#/ definitions / Variable”}]]代替“ type”:[“ number” ,“賓語”]

{
  "properties": {
    "num": {
      "type": [
        "number",{"$ref":"#/definitions/Variable"}
      ]
    }
  },
  "required": [
    "num"
  ],
  "additionalProperties": false,
  "definitions": {
    "Variable": {
      "title": "Variable",
      "properties": {
        "$variable$": {
          "type": "boolean",
          "example": true
        },
        "name": {
          "type": "string"
        },
        "defaultValue": {
          "type": [
            "string",
            "object",
            "number"
          ]
        }
      },
      "required": [
        "$variable$",
        "name"
      ],
      "additionalProperties": false
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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