亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jsonSchema 來驗證有條件的必需屬性

jsonSchema 來驗證有條件的必需屬性

慕田峪4524236 2023-03-02 14:58:04
我的 JSON 負載包含兩個屬性home_number,home_name并且始終至少需要一個屬性。除此之外,這些屬性還有以下附加約束。home_number:類型:字符串,最大長度:4home_name:類型:字符串,最大長度:50如果兩個屬性都不符合要求, JSON 模式應該拋出一個錯誤。例如:有效的 JSON{    "home_number": "1234", // valid}有效的 JSON{    "home_number": null, // invalid    "home_name": "test_home_name" // valid}無效的 JSON    "home_number": "12345", // invalid    "home_name": null // invalid}draft-07我使用if, then關鍵字嘗試了以下帶有版本的 JSON 模式。{    "$schema": "http://json-schema.org/draft-07/schema#",    "type": "object",    "properties": {        "address": {            "$ref": "#/definitions/address",            "properties": {                "house_number": {                    "$ref": "#/definitions/address/house_number"                },                "house_name": {                    "$ref": "#/definitions/address/house_name"                },                "post_code": {                    "$ref": "#/definitions/address/postcode"                }            }        }    },    "required": [        "address"    ],    "definitions": {        "address": {            "type": "object",            "properties": {                "postcode": {                    "type": "string",                    "maxLength": 6                }            },            "anyOf": [                {                    "required": [                        "house_number"                    ]                },                {                    "required": [                        "house_name"                    ]                }            ],            "if": {                "properties": {                    "house_name": {                        "not": {                            "type": "string",                            "maxLength": 50                        }                    }                }            },我的問題是有沒有其他/更好的方法來實現這個使用draft-04版本而不使用draft-07if then 關鍵字?
查看完整描述

1 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

正如評論中指出的那樣,這可能已被多次詢問。


下面的技巧、模式和 json 示例使用邏輯運算符。我不能說它是否更好,它只是將“anyOf”中的任何內容分組(以及您可以在需要時添加的郵政編碼的要求,并且您可以根據需要構建對完整“屬性”內部的引用等) .). 或者您可以將其作為嚴格的異或“oneOf”(也如評論中所述)并確保每個案例的地址->屬性定義都按照您的需要進行調整。


請閱讀(鏈接到我自己過去的回答并不優雅,但它可能會引導您進一步閱讀):JSON Schema conditional: require and not require


您的問題的簡化架構和示例(據我了解):


{

  "$schema": "http://json-schema.org/draft-04/schema#",

  "type": "object",

  "properties" : {

    "address": {

      "type" : "object",

      "anyOf" : [

        { 

          "properties" : {

            "house_number" : {

              "type":"string",

              "maxLength": 4

            },

          },

          "required":["house_number"]

        },

        { 

          properties : {

            "house_name" : {

              "type" : "string",

                "maxLength" : 50

            }

          },

          "required":["house_name"]

        }

      ]

    }

  },

  required: ["address"],

  examples : [

    {

      baddress: {

      }

    },

    {

      address: {

        "house_number":"1234",

        "house_name" : null

      }

    },

    {

      address: {

        "house_number":null,

        "house_name" : null

      }

    },

    {

      address: {

        "house_number":null,

        "house_name" : "some name"

      }

    },

    {

      address: {

        "house_number": "12345",

        "house_name" : "some afafafasagagagffgfsagragsgasgasssssssfdgsdfgsdfgdsgsdfgsdgsdfgdfsgsdfgs name"

      }

    },

  ]

}



查看完整回答
反對 回復 2023-03-02
  • 1 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號