2014-10-23 13 views
7

Ich habe ein JSON-Schema, das eine ziemlich komplexe API Abfrage Syntax beschreibt. Einige der Eigenschaften sind Mustervergleiche, müssen aber auch andere Werte (d. H. Andere explizite Zeichenfolgen) als nur das Muster akzeptieren. Ich kann nirgendwo in der Vielzahl der json schema sites irgendwelche Beispiele dafür finden.jsonschema mehrere Werte für String-Eigenschaft

Ein Beispiel:

{ 
    "type": "object", 
    "properties": { 
     "$gte": { 
      "type": "string", 
      "pattern": "<some-pattern>" 
     } 
    } 
} 

Was ich möchte in der Lage sein, im Beispiel oben zu tun ist, angeben, dass $gte jeder einen bestimmten Satz von eingeschränkten Werte sein kann. Zum Beispiel erfordert diese spezifische Implementierung dass „$ gte“ 's-Wert zu einem der folgenden eingeschränkt werden:

  1. Ein speziellen Datumsformat
  2. Ein Token {token}, die mit einem besonderen Wert auf der server- ersetzt werden Seite

ich habe das in dieser Situation verwendet oneOf Eigenschaft gesehen, aber nur mit der format Eigenschaft, so gehe ich davon aus, dass dies möglich ist, nur nicht sicher, ob der Syntax, wie es zu implementieren, zum Beispiel könnte es sei etwas wie dieses:

{ 
    "type": "object", 
    "properties": { 
     "$gte": { 
      "type": "string", 
      "oneOf": [ 
       {"pattern": "<some-pattern>"}, 
       "{token}", 
       "{another_token}" 
      ] 
     } 
    } 
} 

Jede Klarheit darüber, wie dies zu erreichen wäre, würde sehr geschätzt werden, da ich nicht viel Glück mit der Spezifikation Draft 4 für JSON-Schema oder bei der Suche nach Beispielen habe.

Antwort

13

Wenn die Daten ein von einem festen Satz von genauen Werten sein, können Sie enum:

{ 
    "type": "string", 
    "enum": ["stop", "go"] 
} 

Also, das in Ihrem Beispiel passen, versuchen:

{ 
    "type": "object", 
    "properties": { 
     "$gte": { 
      "type": "string", 
      "oneOf": [ 
       {"pattern": "<some-pattern>"}, 
       {"enum": ["TOKEN", "ANOTHER_TOKEN"]} 
      ] 
     } 
    } 
}