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:

  • Nennen Sie dieses Python / Rubin-Sprachkonstrukt (mit Array-Werten, um Funktionsparameter zu erfüllen)
  • Wie bekomme ich JSON in Flasche?
  • JSON: 2 Zeichenfolgenwerte im Wert verknüpfen
  • Kann nicht einfach mal mit dem Python zerlegen
  • Python Flask-Restful POST nicht JSON Argumente
  • Scrapy von der Skriptausgabe in json
  • 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.