2017-08-22 44 views
1

给定一个JSON架构类似下面必填字段可选对象,该反应-jsonschema形式验证基本上既需要shipping_addressbilling_address即使billing_address根据需要没有列出。这是因为address类型需要它的所有三个属性。我怎样才能使billing_address可选?看起来如果不是所有的address属性都填写完毕,react-jsonschema-form应该不会提交billing_address。以下是到react-jsonschema形式的操场的link与反应-jsonschema形式

{ 
    "definitions": { 
    "address": { 
     "type": "object", 
     "properties": { 
     "street_address": { 
      "type": "string" 
     }, 
     "city": { 
      "type": "string" 
     }, 
     "state": { 
      "type": "string" 
     } 
     }, 
     "required": [ 
     "street_address", 
     "city", 
     "state" 
     ] 
    } 
    }, 
    "type": "object", 
    "properties": { 
    "billing_address": { 
     "title": "Billing address", 
     "$ref": "#/definitions/address" 
    }, 
    "shipping_address": { 
     "title": "Shipping address", 
     "$ref": "#/definitions/address" 
    } 
    }, 
    "required": [ 
    "shipping_address" 
    ] 
} 
+0

,这似乎是与验证的一个问题,如果你有这个http://www.jsonschemavalidator.net/例如尝试,在JSON数据未提供帐单地址工作正常 – Pedro

回答

0

您可以使用dynamic模式的依赖,使帐单地址有条件显示和要求。这与具有可选对象不一样,但如果您愿意有一个稍微不同的用户体验,似乎就足够了。这是一个link到react-jsonschema形式的游乐场。在我看来,最好查看禁用的实时验证(页面右上方有一个复选框)。

{ 
    "definitions": { 
    "address": { 
     "type": "object", 
     "properties": { 
     "street_address": { 
      "type": "string" 
     }, 
     "city": { 
      "type": "string" 
     }, 
     "state": { 
      "type": "string" 
     } 
     }, 
     "required": [ 
     "street_address", 
     "city", 
     "state" 
     ] 
    } 
    }, 
    "type": "object", 
    "properties": { 
    "different_addresses": { 
     "title": "My billing address is different than my shipping address.", 
     "type": "boolean", 
     "default": false 
    }, 
    "shipping_address": { 
     "title": "Shipping address", 
     "$ref": "#/definitions/address" 
    } 
    }, 
    "required": [ 
    "shipping_address" 
    ], 
    "dependencies": { 
    "different_addresses": { 
     "oneOf": [ 
     { 
      "properties": { 
      "different_addresses": { 
       "enum": [ 
       false 
       ] 
      } 
      } 
     }, 
     { 
      "properties": { 
      "different_addresses": { 
       "enum": [ 
       true 
       ] 
      }, 
      "billing_address": { 
       "title": "Billing address", 
       "$ref": "#/definitions/address" 
      } 
      }, 
      "required": [ 
      "billing_address" 
      ] 
     } 
     ] 
    } 
    } 
}