2017-06-09 4 views
2

Ich muss ein Schema erstellen, das erwartet, dass eine Eigenschaft existiert, wenn eine andere Eigenschaft einen bestimmten Wert hat.JSON Schemaabhängigkeit basierend auf Wert

{"handleFailure":"redirect","redirectUrl":"http://something.com"} 

und

{"handleFailure":"reject"} 

beide gültig sein sollte, aber

{"handleFailure:"redirect"} 

sollte keine Gültigkeit aufgrund der redirectUrl Eigenschaft nicht vorhanden ist.

Ich habe versucht, einen Fehler

{ 
    "type": "object", 
    "additionalProperties": false, 
    "oneOf": [ 
    { 
     "properties": { 
     "handleFailure": { 
      "type": "string", 
      "enum": [ 
      "redirect" 
      ] 
     }, 
     "redirectUrl": { 
      "type": "string", 
      "format": "uri" 
     } 
     } 
    }, 
    { 
     "properties": { 
     "handleFailure": { 
      "type": "string", 
      "enum": [ 
      "reject" 
      ] 
     } 
     } 
    } 
    ] 
} 

aber ich habe wie so über die Eigenschaften eines Top-Level-oneOf mit den beiden Schemata machen nicht definiert ist. Gibt es eine Möglichkeit, dies zu tun?

+0

Ich bin in der Lage, Ihr Schema zu analysieren und Objekte zu erstellen, die dagegen validieren. Können Sie genauer über die Fehlermeldung sein, die Sie erhalten? – bhspencer

+1

Haben Sie versucht, das Flag additionalProperties in jedes oneOf-Schema einzufügen? – bhspencer

+0

Vielen Dank, die Flagge wurde verschoben. Ich kann nicht glauben, dass ich eine Stunde damit verbracht habe. –

Antwort

1

Fügen Sie das Flag "additionalProperties": false in die Unterschemas ein, um zu verhindern, dass diese Objekte zusätzliche Eigenschaften aufweisen.

{ 
    "type": "object", 
    "additionalProperties": false, 
    "oneOf": [ 
    { 
     "additionalProperties": false, 
     "properties": { 
     "handleFailure": { 
      "type": "string", 
      "enum": [ 
      "redirect" 
      ] 
     }, 
     "redirectUrl": { 
      "type": "string", 
      "format": "uri" 
     } 
     } 
    }, 
    { 
     "additionalProperties": false, 
     "properties": { 
     "handleFailure": { 
      "type": "string", 
      "enum": [ 
      "reject" 
      ] 
     } 
     } 
    } 
    ] 
}