Как применить дополнительные свойства: false ко всем объектам?

#jsonschema

#jsonschema

Вопрос:

Я создал следующую схему json.

 {
  "type": "object",
  "properties": {
    "hoge": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "foo": {
      "type": "object",
      "properties": {
        "value": {
          "type": "number"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
 

Когда тип — object , я хочу установить additionalproperties = false .
Но это очень избыточно.

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

 {
  "definitions": {
    "baseObject": {
       "type": "object",
       "additionalProperties": false
    }
  },

  "allOf": [{ "$ref": "#/definitions/baseObject"}],
  "properties": {
    "hoge": {
      "allOf": [{ "$ref": "#/definitions/baseObject"}],
      "properties": {
        "code": {
          "type": "string"
        }
      }
    },
    "foo": {
      "allOf": [{ "$ref": "#/definitions/baseObject"}],
      "properties": {
        "value": {
          "type": "number"
        }
      }
    }
  }
}
 

Есть ли какой-либо способ применить additionalproperties: false к типу object ??

Комментарии:

1. вы используете JavaScript или Jquery или в контексте witch вам нужно добавить это свойство ко всем объектам?

Ответ №1:

В проекте схемы JSON 2019-09 и выше вы должны использовать unevaluatedProperties as, а additionalProperties не в вашей удаленной схеме примера.

additionalProperties не удается «видеть сквозь» ключевые слова аппликатора, такие как $ref или allOf . Это немного сложнее, но это самый простой способ подумать об этом. additionalProperties работает только на основе properties и patternProperties внутри одного и того же объекта схемы.