Схема JSON строгой типизации в PatternProperties

У меня есть документ JSON, похожий на ниже

{
  "dell": {
    "memory": {

      "RAM": {
        "RamType": "DDR",
        "Size": 16
      },
      "Graphic": {
        "RamType": "GDDR",
        "Size": 4,
        "dummy": "dummy"
      }
    },
    "dummy": "dummy"
  }
}

Я хочу иметь список пар ключ-значение, где ключом будет имя компьютера, а значением будут свойства компьютеров. Снова в этих значениях я могу иметь несколько пар ключ-значение, как показано выше.

И я написал схему JSON с черновиком 6, как показано ниже

{
  "$schema": "http://json-schema.org/draft-06/schema#",
  "properties": {
    "computers": {
      "patternProperties": {
        "additionalProperties": false,
        "^[a-z0-9-_]+$": {
          "properties": {
            "memory": {
              "patternProperties": {
                "^[a-z0-9-_]+$": {
                  "additionalProperties": false,
                  "properties": {
                    "RamType": {
                      "type": "string",
                      "RamSize": {
                        "type": "number"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Вы можете попробовать это здесь.

Проблема в том, что я не хочу позволять пользователю вводить "фиктивные" значения, как показано в JSON, приведенном выше. очевидно "additionalProperties" : true не работает. Что я могу сделать?

1 ответ

Решение

Ваша основная проблема заключается в том, что ваша схема описывает свойство верхнего уровня, называемое "компьютеры", которого нет в ваших данных. Поэтому ни одна из данных, которые вы тестировали, вообще не была ограничена вашей схемой. Другая проблема заключалась в том, что ваше регулярное выражение не совпадает с заглавными буквами.

{
  "$schema": "http://json-schema.org/draft-06/schema#",
  "patternProperties": {
    "^[a-zA-Z0-9-_]+$": {
      "additionalProperties": false,
      "properties": {
        "memory": {
          "patternProperties": {
            "^[a-zA-Z0-9-_]+$": {
              "additionalProperties": false,
              "properties": {
                "RamType": { "type": "string" },
                "Size": { "type": "number" }
              }
            }
          }
        }
      }
    }
  }
}
Другие вопросы по тегам