Атрибут, представленный в схеме JSON, тип которой может быть двух разных типов - PullRequest
1 голос
/ 11 февраля 2020

Я пишу схему JSON, но у меня есть небольшая проблема. У меня есть файл JSON, где attibute может быть двух разных типов, давайте рассмотрим пример файла JSON, в котором возникла проблема.

Файл JSON:

"predicates" : [
        {
        "predicate":{ "text": "STATE == TRUE", "type" : "P" }
        },
        {
        "predicate":"None"
        }
    ]

Предикатом может быть тип объекта или строка со значением None, поэтому, как бы это было представлено в JSON схеме?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Вы хотите ключевое слово anyOf. Это позволяет вам давать несколько схем. Если какая-либо из схем anyOf действительна, то действительна anyOf.

{
  "anyOf": [
    { "const": "None" },
    {
      "type": "object",
      "properties": {
        "text": { "type": "string" },
        "type": { "type": "string" }
      },
      "required": ["text", "type"]
    }
  ]
}

Вот и дополнительная ссылка, https://json-schema.org/understanding-json-schema/reference/combining.html#anyof

0 голосов
/ 11 февраля 2020

JSON Ключевое слово Schema type принимает массив значений в дополнение к одной строке.

Ваша схема будет выглядеть следующим образом ...

{
  "properties": {
    "predicates": {
      "items": {
        "properties": {
          "predicate": {
            "type": [
              "string",
              "object"
            ]
          }
        }
      }
    }
  }
}

Вы можете проверить это изменив один из типов на другой. Вот игровая площадка с этой схемой: https://jsonschema.dev/s/2NcC2

...