список enum как свойство объекта в схеме json - PullRequest
1 голос
/ 17 мая 2019

Я ищу способ объявить объекты, определенные в списке перечисления.

Вот что я хочу проверить:

{
  "object1": {
    "subobject1": {
      "value": 123
    },
    "subobject2": {
      "value": 456
    }
  },
  "object2": {
    "subobject3": {
      "value": 789
    }
  },
  "object3": {
    "subobject4": {
      "value": 123
    }
  },
  "object4": {
    "subobject5": {
      "value": 234
    }
  }
}

Вот моя схема, которую я хочуиспользовать для проверки:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "definitions": {
        "list1": {
            "enum": [
                "object1",
                "object2",
                "object3",
                "object4"
            ],
       "list2": {
            "enum": [
                "subobject1",
                "subobject2",
                "subobject3",
                "subobject4",
                "subobject5"
            ]
        }

        }
    },
    "properties": {
        "type": {
            "anyOf": [
                {
                    "$ref": "#/definitions/list1"
                }
            ]
        }
    },
    "additionalProperties": false
}

Но я получаю следующую ошибку:

Свойство 'object1' не определено, и схема не допускает дополнительных свойств.

Я действительно хочу быть очень строгим и иметь возможность объявить только тот, который указан в перечислении, потому что я знаю, что если я удалю «AdditionalProperties»: false, я могу добавить любую нужную мне информацию, и она будет работать.

1 Ответ

0 голосов
/ 20 мая 2019

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

{
    "type": "object",
    "definitions": {
      "list1": {
        "properties": {
          "subobject1": {"type": "object"},
          "subobject2": {"type": "object"},
          "subobject3": {"type": "object"},
          "subobject4": {"type": "object"},
          "subobject5": {"type": "object"}
        }
      }
   },
   "properties": {
     "object1": {"type": "object", "$ref": "#/definitions/list1"},
     "object2": {"type": "object", "$ref": "#/definitions/list1"},
     "object3": {"type": "object", "$ref": "#/definitions/list1"},
     "object4": {"type": "object", "$ref": "#/definitions/list1"}
   },
   "additionalProperties": false
}

Может быть, это не то, что вы хотели?Я близко?

...