Ich verwende json-schema und möchte nur zulassen, dass Eigenschaften, die in dieser Datei deklariert sind, die Validierung bestehen. Wenn ein Benutzer beispielsweise eine "name" -Eigenschaft in seinem json-Objekt übergibt, schlägt dieses Schema fehl, da "name" hier nicht als Eigenschaft aufgeführt ist.
Gibt es eine ähnliche Funktion wie "erforderlich", mit der nur die aufgelisteten Eigenschaften übergeben werden können?
{
"$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"
]
}
json
jsonschema
ipengineer
quelle
quelle
Antworten:
Ich glaube, was Sie tun müssen, um dies zu erreichen, ist
additionalProperties
falsch. Siehe die Spezifikation hierquelle
Zu Ihrer Information - es sieht so aus, als würde Version 5 des Standards einen Validierungsmodus "Verbot unbekannter Eigenschaften" beschreiben .
Anstatt diese Anforderung in das Format aufzunehmen (was, wie Chris Pitman in den Kommentaren sagt, die zukünftige Erweiterbarkeit beeinträchtigt), können Sie Ihren Prüfer einfach anweisen , unbekannte Eigenschaften als Fehler zu kennzeichnen. Es ist also wie ein sehr strenger Validierungsmodus, der für Entwickler nützlich ist.
Einige Validatoren unterstützen dies bereits (z. B. tv4 ):
var result = tv4.validateMultiple(data, schema, checkRecursive, banUnknownProperties);
Mit diesem Tool
checkRecursive
sollte es verwendet werden, wenn Ihre Daten möglicherweise Zirkelverweise enthalten und genau dasbanUnknownProperties
tun , was Sie möchten, ohne es verwenden zu müssen"additionalProperties":false
.quelle
Geben Sie in Ihrer Definition Folgendes an:
"required": []
"additionalProperties": false
DEMO:
ohne
"additionalProperties": false
:mit
"additionalProperties": false
:quelle