проверить вложенное содержимое схемы json

Я создаю схему, состоящую из нескольких категорий. В каждой категории есть массив пар ключ: значение. Каждый ключ представляет отображаемое имя значения. Каждое значение уникально и может быть присвоено только одному ключу и категории.

Например, категория под названием «приматы» будет иметь «человек» в качестве одного из ключевых / отображаемых имен, а биологическое имя «Homo sapiens» будет соответствующим значением пары ключ: значение.

Я хочу проверить ввод данных, чтобы данные совпадали только с одним из ключевых / отображаемых имен. Я поставил anyOf для категорий, он выполняет ту же работу? Так вы расставите элементы в схеме?

 {
  "$schema": "https://example.com/schema/dictionary",
  "$id": "https://example.com/schemaoutput/dictionary",
  "description": "A schema that validates the minimum requirements for validation output",
  "type": "array",
  "items": {
    "additionalProperties": false,
    "properties": {
      "subcat1": {
        "type": "string",
        "title": "category1",
        "tag": [
          {
            "display_labelA": [
              "class_A"
            ],
            "display_labelB": [
              "class_B"
            ]
          }
        ]
      },
      "subcat2": {
        "type": "string",
        "title": "category2",
        "tag": [
          {
            "display_labelC": [
              "class_C"
            ],
            "display_labelD": [
              "class_D"
            ]
          }
        ]
      }
    },
    "anyOf": [
      {
        "required": [
          "subcat1",
          "subcat2"
        ]
      }
    ]
  }
}

Редактировать:

В соответствии с просьбой я обновил сообщение с ожидаемыми сценариями прохождения и отказа. Например, я хочу создать схему json, содержащую разные категории животных в животном мире. Каждая пара ключ: значение относится к общеизвестному кличке животного и соответствующему научному названию. Принимаются только данные об общеизвестных именах животных.

Сценарии прохождения:

  1. Запись данных «человек» будет принята, поскольку это одна из пар ключ: значение (человек: Homo sapiens) категории «приматы».
  1. Также допускается ввод данных «шимпанзе». Это также одна из пар ключ: значение (шимпанзе: пан троглодиты) категории «приматы».
  2. Допускается ввод данных «лосось». Его пара ключ: значение (Лосось: Salmo salar Linnaeus) относится к другой категории «рыба».

Сценарии сбоя:

  1. Любые данные, не указанные в словаре животного мира, не принимаются, например, Груша, Апельсины, Стол, Стулья…

person byc    schedule 15.04.2021    source источник
comment
Я не совсем понимаю это. Не могли бы вы привести несколько примеров экземпляров JSON, которые показывают случаи, которые должны пройти, и случаи, которые должны завершиться неудачей?   -  person Jason Desrosiers    schedule 16.04.2021
comment
@JasonDesrosiers Извините, это было непонятно. Думаю, я был омрачен, когда написал вопрос, так как я еще очень новичок в этом. Я обновил несколько ожидаемых сценариев прохождения и отказа.   -  person byc    schedule 16.04.2021
comment
Боюсь, в этом все еще нет смысла. Я подозреваю, что вы пытаетесь заставить схему JSON делать то, чего не делает схема JSON. У вас есть схема, описывающая массив категорий. Вы можете использовать эту схему для проверки правильности структуры массива категорий. Похоже, вы хотите подтвердить, что строка, например человеческая, находится в массиве категорий. На самом деле вы хотите каким-то образом проверить экземпляр, а не схему. Это мое лучшее понимание того, что вы пытаетесь сделать.   -  person Jason Desrosiers    schedule 19.04.2021
comment
@JasonDesrosiers: да, вы подозреваете, что я хочу сделать то, что нужно - проверить строки, существующие в определенном словаре. Я знаю, что схема json может устанавливать диапазон числовых значений и типов данных для проверки, но в моем случае я хочу проверить ввод строковых данных. Я начинаю думать, если этот вопрос помещает в ссылку что-то, что мне нужно? stackoverflow.com/questions/57076320/   -  person byc    schedule 23.04.2021
comment
Я добавил здесь ответ - структура json действительна, но хочу знать, логично ли это / что вы имеете в виду @JasonDesrosiers   -  person byc    schedule 23.04.2021


Ответы (1)


Просматривая 1 и другие сообщения, я думаю, что enum - это то, что мне нужно пары ключ карты: значение (т. е. биологическое имя: общеизвестное имя) в каждой категории (приматы или рыба). Я использую anyOf в конце схемы JSON для проверки ввода данных, содержащих любые значения, указанные в любой категории.

{
    "$schema": "https://example.com/schema/dictionary",
    "$id": "https://example.com/schemaoutput/dictionary",
    "description": "A schema that validates the minimum requirements for validation output",
    "type": "array",
    "items": {
        "additionalProperties": false,
        "properties": {
            "subcat1": {
                "type": "string",
                "title": "category1",
                "enum": [{
                    "display_labelA": "class_A",
                    "display_labelB": "class_B"
                }]
            },
            "subcat2": {
                "type": "string",
                "title": "category2",
                "enum": [{
                    "display_labelA": "class_A",
                    "display_labelB": "class_B"
                }]
            }
        },
        "anyOf": [{
            "required": [
                "subcat1",
                "subcat2"
            ]
        }]
    }
}
person byc    schedule 23.04.2021