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:

  • Python ijson große Datei Schleife, um Namen zu bekommen
  • Scrapy :: Probleme mit JSON Export
  • Wie konvertiere ein JPEG-Bild in json-Datei in Google-Maschine lernen
  • Syntaxfehler beim Analysieren von Json-Daten in Javascript
  • Wie lese ich mehrere Wörterbücher aus einer Datei in Python?
  • Python JSON feed gibt String nicht Objekt zurück
  • 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.