Условная схема JSON требуется тогда и только тогда, когда во вложенном объекте существует определенный ключ - PullRequest
0 голосов
/ 25 мая 2019

Мой вопрос к jsonschema имеет два аспекта:

Учитывая

{
  "foo": {"ar": {"a": "r"}},
  "bar": ""
}
  1. Как проверить, существует ли ключ "ar" внутри "foo"?

  2. И только если «ar» существует внутри «foo», как мне сделать так, чтобы «bar» существовал внутри данного json?

Я пытался просмотреть другие ответы SO или документы jsonschema, но они, кажется, только проверяют, имеет ли ключ конкретное значение, а не просто существует ли ключ независимо от его значения. И jsonschema для вложенных объектов, кажется, проверяет только самый глубокий уровень гнезда, а не где-то посередине.

Я придумал это, но это не работает.

{
  "definitions": {},
  "$schema": "https://json-schema.org/draft-07/schema#",
  "$id": "https://example.com/root.json",
  "type": "object",
  "properties": {
    "foo": {
      "type": "object"
    },
    "bar": {
      "type": "string"
    }
  },
  "required": [
    "foo"
  ],
  "if": {
    "properties": {
      "foo": {
        "properties": {
          "ar": {
            "type": "object"
          }
        }
      }
    }
  },
  "then": {
    "required": [
      "bar"
    ]
  }
}

1 Ответ

1 голос
/ 25 мая 2019

Чтобы проверить, присутствует ли свойство, используйте ключевое слово required.

{
  "properties": {
    "foo": {
      "required": ["ar"]
    }
  },
  "required": ["foo"]
}

Эта схема имеет значение true, если присутствует /foo/ar, и значение false, если его нет.Используйте это вместо вашей if схемы, и ваша условная версия должна работать как положено.

...