2016-07-06 2 views
0

JSON-Schemas haben a required property, die die erforderlichen Felder in einem JSON-Objekt auflistet. Zum Beispiel validiert die folgende (vereinfachte) Schema einen Anruf, eine SMS-Nachricht an einen Benutzer sendet:JSON-Schema: XOR auf erforderlichen Feldern

{ 
    "type": "object", 
    "properties": { 
    "userId": { "type": "string" }, 
    "text":  { "type": "string" }, 
    }, 
    "required": ["userId", "text"] 
} 

Nehmen wir an, ich die Nachricht zu senden, um mehrere Benutzer aktivieren möchten, dh entweder einen userId Feld oder ein Array von userIds (aber nicht beides oder keines). Gibt es eine Möglichkeit, eine solche Bedingung in einem JSON-Schema auszudrücken?

Natürlich gibt es Möglichkeiten, das Problem in diesem Fall zu überwinden - zum Beispiel ein userId Array mit einem einzelnen Element - aber der allgemeine Fall ist interessant und nützlich.

Antwort

2

Nicht elegant überhaupt, aber ich denke, dass Sie es aus allOf und oneOf heraus hacken können. Etwas wie:

{ 
    "allOf" : [ 
     { 
     "type" : "object", 
     "properties" : { 
      // base properties come here 
     } 
     }, 
     "oneOf" : [ 
     { 
     "properties" : { 
      "userIds" : {"type" : "array"} 
      }, 
      "required" : ["userIds"] 
     }, 
     { 
      "properties" : { 
      "userId" : {"type" : "number"} 
      }, 
      "required" : ["userId"] 
     } 
     ] 
    ] 
} 
Verwandte Themen