Заменить "унаследованное" свойство JSON заданным значением c - PullRequest
0 голосов
/ 08 мая 2020

Рассмотрим следующий пример схемы:

"Foo": {
      "type": "object",
      "properties": {
        "num": {
          "type": "integer",
          "minimum": 1,
          "maximum": 64
        }
  }

"Bla": {
      "type": "object",
      "properties": {
        "base": {
          "type": "object",
          "allOf" : [
            {"$ref": "#/definitions/Foo"},
            {"num" : {"enum" : [64]} }
          ]
        }
      }

Я пытаюсь ограничить значение унаследованного свойства «num» только 64, а не просто любым значением от 1 до 64. Есть ли способ добиться этого?
Например, я хочу, чтобы это подтвердило:

"Bla" : {
"base" : {"num" : 64}
}

Но не это

"Bla" : {
"base" : {"num" : 32}
}

1 Ответ

0 голосов
/ 09 мая 2020

Для полноты картины предоставим в качестве ответа мой предыдущий комментарий:

  1. Если вы оберните ”num” внутри allOf в другой properties, вы уже должны достичь того, чего хотите.
  2. Кроме того, вы можете использовать "const": 64 вместо "enum": [64] - для повышения удобочитаемости.
  3. Если вы можете использовать последний черновик 2019-09, вы можете даже избежать allOf, так как в этом случае $ref может сопровождаться другими ключевыми словами, в результате получается примерно следующее:
{
  "$schema": "https://json-schema.org/draft/2019-09/schema",

...

  "$defs": {
    "Foo": {
      "type": "object",
      "properties": {
        "num": {
          "type": "integer",
          "minimum": 1,
          "maximum": 64
        }
      }
    },
    "Bla": {
      "type": "object",
      "properties": {
        "base": {
          "$ref": "#/$defs/Foo",
          "type": "object",
          "properties": {
            "num": {
              "const" : 64
            }
          }
        }
      }
    }
  }
}
...