2013-07-08 4 views
24

Ich verwende json-schema und möchte nur zulassen, dass Eigenschaften, die in dieser Datei deklariert sind, die Validierung bestehen. Wenn beispielsweise ein Benutzer eine "name" -Eigenschaft in seinem json-Objekt übergibt, wird dieses Schema fehlschlagen, weil "name" hier nicht als Eigenschaft aufgeführt ist.Lassen Sie nur Eigenschaften zu, die im JSON-Schema deklariert sind.

Gibt es eine ähnliche Funktion wie "erforderlich", die nur die aufgeführten Eigenschaften passieren lässt?

{ 
"$schema": "http://json-schema.org/draft-04/schema#", 
"title": "Accounting Resource - Add Item", 
"type": "object", 
"properties": { 
    "itemNumber": { 
     "type":"string", 
     "minimum": 3 
    }, 
    "title": { 
     "type":"string", 
     "minimum": 5 
    }, 
    "description": { 
     "type":"string", 
     "minimum": 5 
    } 
}, 
"required": [ 
    "itemNumber", 
    "title", 
    "description" 
] 

}

+2

Selbst wenn es einen Weg gibt, dies scheint wie zukünftige Erweiterbarkeit in den Fuß zu schießen. –

+5

Irgendwann in der Zukunft werde ich nur diese Eigenschaften zu diesem Schema hinzufügen. – ipengineer

+1

@ipengineer - das funktioniert (-ish) so lange wie * du * die Person ist, die die Verlängerung durchführt. Es bedeutet auch, dass Sie eine Ressource ändern, von der manche annehmen, dass sie statisch ist. – cloudfeet

Antwort

3

FYI - es sieht wie v5 des Standards wird eine "ban unknown properties" Validierungsmodus beschreiben.

Anstatt diese Anforderung Teil des Formats zu machen (was Chris Pitman in den Kommentaren sagt, beschädigt zukünftige Erweiterbarkeit), können Sie einfach Ihre Validator anweisen, unbekannte Eigenschaften als Fehler zu kennzeichnen. Es ist also wie ein super-strenger Validierungsmodus, der für Entwickler nützlich ist.

Einige Validatoren bereits unterstützen diese (zB tv4):

var result = tv4.validateMultiple(data, schema, checkRecursive, banUnknownProperties); 

Mit diesem Tool checkRecursive verwendet werden sollten, wenn Ihre Daten zirkuläre Referenzen haben könnten, und banUnknownProperties tun genau, was Sie wollen, ohne zu verwenden "additionalProperties":false.