2015-06-16 3 views
15

Das required Feld in JSON Schema

JSON Schema kennzeichnet die properties, required und additionalProperties Felder aus.JSON Schema - verlangt, dass alle Eigenschaften

{ 
    "elephant": "Johnny", 
    "giraffe": "Jimmy", 
    "polarBear": "George" 
} 

aber fehl, wenn die Liste der Eigenschaften ist nicht genauelephant, giraffe, polarBear: Zum Beispiel

{ 
    "type": "object", 
    "properties": { 
     "elephant": {"type": "string"}, 
     "giraffe": {"type": "string"}, 
     "polarBear": {"type": "string"} 
    }, 
    "required": [ 
     "elephant", 
     "giraffe", 
     "polarBear" 
    ], 
    "additionalProperties": false 
} 

Wird JSON-Objekte wie validieren.

Das Problem

ich copy-paste oft die Liste der properties in die Liste der required und von lästigen Bugs leiden, wenn die Listen nicht wegen Tippfehler und andere dumme Fehler anzeigen lassen.

Gibt es einen kürzeren Weg zu bezeichnen, dass alle Eigenschaften benötigt werden, ohne sie explizit zu benennen?

+2

Es wäre schön, wenn die JSON-Schemaspezifikation '" required ": true' unterstützt, wobei der boolesche Wert das übliche Array ersetzt. – rcrogers

Antwort

16

Sie können einfach die Eigenschaft "minProperties" anstelle der expliziten Benennung aller Felder verwenden.

{ 
    "type": "object", 
    "properties": { 
     "elephant": {"type": "string"}, 
     "giraffe": {"type": "string"}, 
     "polarBear": {"type": "string"} 
    }, 
    "additionalProperties": false, 
    "minProperties": 3 
} 
+0

Beste Vorgehensweise bisher. –

+1

Danke, das funktioniert super. Beachten Sie jedoch, dass dies von der Spezifikation '" additionalProperties "abhängt: false' Wenn zusätzlicheProperties nach Spezifikation oder standardmäßig (falls nicht angegeben) erfüllt ist, kann die Einschränkung minProperties durch eine zusätzliche Eigenschaft erfüllt werden, die ist _nicht_ eine der angegebenen in Ihrem Schema-Objekt. – yokeho

+0

Die Fehlermeldung ist auf diese Weise weniger nützlich. Sie wissen, dass Sie eine Immobilie vermissen, müssen aber herausfinden, welche. Trotzdem, schlägt jedes Mal alle Eigenschaften zu kopieren. – Memetic

5

Ich bezweifle, gibt es eine Möglichkeit, erforderliche Eigenschaften anders als explizit benennen sie im erforderlichen Array.

Aber wenn Sie dieses Problem sehr häufig auftreten, würde ich vorschlagen, dass Sie ein kleines Skript schreiben, die Ihr json-Schema nachbearbeiten und automatisch das erforderliche Array für alle definierten Objekte hinzufügen.

Das Skript muss nur den JSON-Schema-Baum durchlaufen und auf jeder Ebene, wenn ein "Eigenschaften" -Schlüsselwort gefunden wird, ein "erforderliches" Schlüsselwort mit allen definierten Schlüsseln hinzufügen, die in Eigenschaften auf derselben Ebene enthalten sind.

Lassen Sie die Maschinen das Bohrzeug machen.

0

Ich tue dies in Code mit einem Einzeiler, zum Beispiel, wenn ich required für insert in einem DB verwenden möge, will aber nur gegen das Schema validieren, wenn ein update durchführen.