Схема JSON - Экземпляр не имеет дополнительных полей, кроме тех, которые объявлены в схеме - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь выяснить, есть ли способ проверить, что конкретный экземпляр JSON не имеет дополнительных полей, кроме тех, которые объявлены в схеме.

Давайте возьмем эту схему в качестве примера:

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "Client",
    "type": "object",
    "properties": {
        "name": {
            "type": "string"
        },
        "email": {
            "type": "string"
        },
        "isActive": {
            "type": "boolean"
        }
    },
    "required": []
}

Я хотел бы убедиться, что любой JSON этого "типа" может иметь только имя, адрес электронной почты и isActive.Если следующий JSON проверен, я бы хотел, чтобы проверка завершилась неудачно:

{
   "name": "John",
   "email": "john@example.com",
   "isActive": true,
   "extrafield": 123
}

Я использую json-schema-validator для выполнения проверки, но у меня есть ощущение, что больше, чемпроблема / допущение реализации с конкретным валидатором, который я использую, это моя схема JSON, которая не обеспечивает предотвращение неопределенных полей.

Как мне этого добиться?Спасибо

1 Ответ

0 голосов
/ 14 февраля 2019

То, что вы ищете, это additionalProperties.

Значение «AdditionalProperties» ДОЛЖНО быть действительной схемой JSON.

Это ключевое слово определяет, как дочерние экземпляры проверяются дляобъектов, и непосредственно не проверяет непосредственно непосредственный экземпляр.

Проверка с помощью «AdditionalProperties» применяется только к дочерним
значениям имен экземпляров, которые не соответствуют никаким именам в «свойствах» и не совпадаютлюбое регулярное выражение в "patternProperties".

Для всех таких свойств проверка завершается успешно, если дочерний экземпляр проверяется по схеме "AdditionalProperties".

https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.5.6

Для перевода: значение ключа в properties, который является схемой, применяется к объекту экземпляра значения ключей.

Любые свойства объекта вашего экземпляра, которые не проверены properties (ни по patternProperties), затем оцениваются по additionalProperties.

Значением любой схемы может быть false, что приводит к ошибке проверки, так что выНе добавляйте additionalProperties: false в вашу схему.

Обратите внимание, что additionalProperties не может "видеть сквозь" другие ключевые слова аппликатора, такие как oneOf, и применяется только на основе properties и patternProperties.

(черновик-8 введет новое ключевое слово, unevaluatedProperties, чтобы обеспечить эту функциональность, но эта версия в настоящее время не публикуется).

...