Разрешить только $ ref тип в массиве JSON - PullRequest
0 голосов
/ 21 мая 2018

У меня есть следующая схема, в которой массив values должен принимать только объекты типа value.Я использую Newtonsoft.Json v11.0.2 для проверки.

{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "http://some.thing/json",
  "type": "object",
  "definitions": {
    "value": {
      "$id": "/definitions/value",
      "required": ["a", "b", "c"],
      "properties": {
        "a": {
          "$id": "/properties/value/a",
          "type": "string"
        },
        "b": {
          "$id": "/properties/value/b",
          "type": "string"
        },
        "c": {
          "$id": "/properties/value/c",
          "type": "string"
        }
      }
    }
  },
  "required": ["values"],
  "properties": {
    "values": {
      "$id": "/properties/values",
      "type": "array",
      "items":
      {
        "$id": "/properties/values/item",
        "$ref": "/definitions/value"
      },
      "uniqueItems": true
    }
  }
}

Это работает, так как не проверяет что-то вроде

{
  "values": [
    {
      "a": "a2",
      "b": "b2"
    }
  ]
}

, но действительно проверяет

{
  "values": [
    {
      "a": "a2",
      "b": "b2",
      "c": "c3"
    },
    "string"
  ]
}

, чего не должно быть.

Как я могу заставить только value s быть в массиве?"additionalItems": false ограничивает количество предметов, а "additionalProperties": false внутри "предметов", похоже, ничего не делает, так что это тоже не то, что я ищу.

1 Ответ

0 голосов
/ 21 мая 2018

Вы пытаетесь проверить действительные элементы массива значений, и "additionalProperties": false в пределах вашего определения элементов будет влиять только на объект.

Вместо этого вам нужно добавить "type": "object" к вашему значениюопределение ...

{
  "$schema": "http://json-schema.org/draft-07/schema",
  "$id": "http://some.thing/json",
  "type": "object",
  "definitions": {
    "value": {
      "$id": "/definitions/value",
      "type": "object",
      "required": [
        "a",
        "b",
        "c"
      ],
      "properties": {
        "a": {
          "$id": "/properties/value/a",
          "type": "string"
        },
        "b": {
          "$id": "/properties/value/b",
          "type": "string"
        },
        "c": {
          "$id": "/properties/value/c",
          "type": "string"
        }
      }
    }
  },
  "required": [
    "values"
  ],
  "properties": {
    "values": {
      "$id": "/properties/values",
      "type": "array",
      "items": {
        "$ref": "/definitions/value"
      }
    },
    "uniqueItems": true
  }
}
...