2015-05-08 10 views
5

Vorrei definire certificate e privateKey obbligatorio quando il flag secure è impostato su true. È possibile raggiungere questo obiettivo?Effettuare un'opzione facoltativa richiesta quando ne è stata definita un'altra in JSON Schema

{ 
    type: 'object', 
    properties: { 
     'secure': { 
      title: 'Serve files over HTTPS', 
      description: 'Flag telling whether to serve contents over HTTPS and WSS', 

      type: 'boolean', 
      default: false 
     }, 

     'certificate': { 
      title: 'Certificate file', 
      description: 'Location of the certificate file', 

      type: 'string' 
     }, 

     'privateKey': { 
      title: 'Private key file', 
      description: 'Location of the private key file', 

      type: 'string' 
     } 
} 

risposta

0

Stai chiedendo di avere lo schema dipendente dal contenuto? Voglio dire "ciò che lo schema consente dipende da cosa c'è nel contenuto (json) di destinazione"?

Non puoi farlo.

0

C'è un modo, ma non è bello. È necessario utilizzare la parola chiave anyOf per definire la modalità di convalida quando secure è true e come si desidera che convalidi quando secure è false.

{ 
    "type": "object", 
    "properties": { 
    "secure": { 
     "title": "Serve files over HTTPS", 
     "description": "Flag telling whether to serve contents over HTTPS and WSS", 
     "type": "boolean" 
    } 
    }, 
    "anyOf": [ 
    { 
     "type": "object", 
     "properties": { 
     "secure": { 
      "enum": [true] 
     }, 
     "certificate": { 
      "title": "Certificate file", 
      "description": "Location of the certificate file", 
      "type": "string" 
     }, 
     "privateKey": { 
      "title": "Private key file", 
      "description": "Location of the private key file", 
      "type": "string" 
     } 
     }, 
     "required": ["certificate", "privateKey"] 
    }, 
    { 
     "type": "object", 
     "properties": { 
     "secure": { 
      "enum": [false] 
     } 
     } 
    } 
    ] 
} 
1

È possibile utilizzare la parola chiave 'dipendenze'.

{ 
    dependencies: { 
    secure: ['certificate', 'privateKey'] 
    } 
} 

Si può anche specificare lo schema dei dati devono corrispondere quando sicuro è presente:

{ 
    dependencies: { 
    secure: { 
     properties: { 
     certificate: { 
      type: 'string' 
     } 
     privateKey: { 
      type: 'string' 
     } 
     }, 
     required: ['certificate', 'privateKey'] 
    } 
    } 
}