Wie kann man json-schema machen, um aber ein anderes Feld zu erlauben?

Ist es möglich, jsonschema zu machen, um nur eines von zwei Feldern zu haben.

Zum Beispiel, wenn ich einen JSON mit ether start_dt oder end_dt haben will, aber nicht beide gleichzeitig. so was:

  • Wie JSON kodieren Entitäten?
  • MemoryError mit json.dumps ()
  • Firebase mit Floating-Point-Nummer als Schlüssel
  • Github-api gibt 404 bei der Übergabe von json-data mit python + urllib2
  • Serialisierung eines Python namedtuple zu json
  • Versuche, "request.body" aus POST in Django zu analysieren
  • OK

     { "name": "foo", "start_dt": "2012-10-10" } 

    OK

     { "name": "foo", "end_dt": "2012-10-10" } 

    NICHT OK

     { "name": "foo", "start_dt": "2012-10-10" "end_dt": "2013-11-11" } 

    Was soll ich dem Schema hinzufügen:

     { "title": "Request Schema", "type": "object", "properties": { "name": { "type": "string" }, "start_dt": { "type": "string", "format": "date" }, "end_dt": { "type": "string", "format": "date" } } } 

    One Solution collect form web for “Wie kann man json-schema machen, um aber ein anderes Feld zu erlauben?”

    Sie können dies mit oneOf ausdrücken. Dies bedeutet, dass die Daten genau mit einem der gelieferten Subschemata übereinstimmen müssen, aber nicht mehr als eins.

    Wenn man dieses mit dem required start_dt , sagt dieses Schema, dass Instanzen entweder start_dt definieren start_dt , OR definieren end_dt – aber wenn sie beide enthalten, dann ist es ungültig:

     { "type": "object", "properties": { "name": {"type": "string"}, "start_dt": {"type": "string", "format": "date"}, "end_dt": {"type": "string", "format": "date"} }, "oneOf": [ {"required": ["start_dt"]}, {"required": ["end_dt"]} ] } 

    Online-Demos mit Ihren drei Beispielen:

    • OK
    • OK
    • NICHT OK
    Python ist die beste Programmiersprache der Welt.