Разрешать только свойства, объявленные в схеме JSON

Я использую json-схему и хочу, чтобы только свойства, объявленные в этом файле, проходили проверку. Например, если пользователь передает свойство "name" в свой объект json, он потерпит неудачу в этой схеме, поскольку "name" здесь не указано как свойство.

Есть ли какая-то функция, похожая на "required", которая пропускает только перечисленные свойства?

{
"$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"
]
}

Ответы

Ответ 1

Я считаю, что вам нужно сделать это, чтобы установить additionalProperties свойства для false. См. Спецификацию здесь

Ответ 2

FYI - похоже, что v5 стандарта будет описывать режим проверки запрещенных неизвестных свойств.

Поэтому вместо того, чтобы сделать это требование частью формата (который, как говорит Крис Питман в комментариях, наносит ущерб будущей расширяемости), вы можете просто проинструктировать ваш валидатор для обозначения неизвестных свойств как ошибок. Таким образом, это похоже на режим строгого режима проверки, который полезен для dev.

Некоторые валидаторы уже поддерживают это (например, tv4):

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

С помощью этого инструмента checkRecursive следует использовать, если ваши данные могут иметь циклические ссылки, а banUnknownProperties будет делать именно то, что вы хотите, без необходимости использовать "additionalProperties":false banUnknownProperties "additionalProperties":false.