Использование ключевого слова «дискриминатора» в схеме JSON - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь вести себя как полиморфное c поведение в JSON. У меня есть следующий пример JSON, который я хочу проверить по схеме JSON ниже:

simpified_example. json

{
    "header": null,

    "body": null,

    "footer": {
        "kpis": {
            "metrics_name": "metrics_type_2",
            "metrics_value": 3.141592
        }
    }
}

simpified_schema.schema. json

{
  "definitions": {
    "metrics_name_output_type": {
      "type": "string",
      "enum": [
        "metrics_type_1",
        "metrics_type_2",
        "metrics_type_3"
      ]
    }
  },

  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "title": "The Root Schema",
  "required": [
    "header",
    "body",
    "footer"
  ],

  "properties": {

    "header": {
      "$id": "#/properties/header",
      "type": "null"
    },

    "body": {
      "$id": "#/properties/body",
      "type": "null"
    },

    "footer": {
      "$id": "#/properties/footer",
      "type": "object",
      "title": "The Footer Schema",

      "kpis": {
        "title": "The Kpis Schema",
        "$id": "#/properties/footer/properties/kpis",
        "discriminator": {
          "tag": "metrics_name",
          "mapping": {
            "metrics_type_1": {
              "properties": {
                "metrics_value": { "type": "string" }
              }
            },
            "metrics_type_2": {
              "properties": {
                "metrics_value": { "type": "number" }
              }
            },
            "metrics_type_3": {
              "properties": {
                "metrics_value": { "type": "integer" }
              }
            }
          }
        }
      }
    }
  }
}

Проблема в том, что я не понимаю, как применить «дискриминатор», который я написал. Мой пример JSON в сравнении с моей примерной схемой кажется всегда VALID согласно группе валидаторов. Например:

https://jsonschemalint.com/#! / Version / draft-07 / markup / json

Что я должен отредактировать / добавить в дополнение к ограничению "string" в случае "metrics_type_3" например, выбор (правильный будет "integer" )?

...