Как применить подсхему к значению, когда ключ неизвестен со схемой JSON? - PullRequest
0 голосов
/ 24 января 2020

Здесь есть небольшая загадка, я пытаюсь создать схему для использования в моем приложении python, но я не могу понять, как заставить это поле "мы" быть обязательным и содержать случайная строка (например: "QWERT1")

{
  "we": [
    {
      "finished": "01.23.2020 12:56:31",
      "run": "02611",
      "scenarios": [
        {
          "name": "name",
          "status": "failed",
          "run_id": "42",
          "tests": [
            {
              "test_id": "7",
              "name": "TC29",
              "status": "success",
              "finished": "01.23.2020 12:56:31"
            }
          ]
        }
      ]
    }
  ]
}

Остальные поля также должны быть обязательными (имя, статус и т. д. c). Если я исключу «мы» из обязательных, остальные поля будут считаться необязательными, и если я добавлю «мы» как обязательные, я не смогу использовать другое слово: / Это моя схема. в конечном итоге (с «мы» обязательно):

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "we": {
      "type": "array",
      "items": [
        {
          "type": "object",
          "properties": {
            "finished": {
              "type": "string"
            },
            "run": {
              "type": "string"
            },
            "scenarios": {
              "type": "array",
              "items": [
                {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    },
                    "run_id": {
                      "type": "string"
                    },
                    "tests": {
                      "type": "array",
                      "items": [
                        {
                          "type": "object",
                          "properties": {
                            "test_id": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "status": {
                              "type": "string"
                            },
                            "finished": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "test_id",
                            "name",
                            "status",
                            "finished"
                          ]
                        }
                      ]
                    }
                  },
                  "required": [
                    "name",
                    "status",
                    "run_id",
                    "tests"
                  ]
                }
              ]
            }
          },
          "required": [
            "finished",
            "run",
            "scenarios"
          ]
        }
      ]
    }
  },
  "required": [
    "we"
  ]
}

Есть идеи?

1 Ответ

0 голосов
/ 27 января 2020

Если я правильно понимаю, ключ объекта root может быть любой строкой.

Сначала вам нужно заменить required на minProperties: 1. Если вам требуется только 1 свойство, вам также необходимо maxProperties: 1.

Далее вам нужно использовать additionalProperties вместо properties > we.

additionalProperties применяет значение подсхемы ко всем значения свойств в JSON объекте местоположения экземпляра.

Вот голая версия этой схемы ...

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "minProperties": 1,
  "additionalProperties": {}
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...