Схема 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" }
}
}
}
}
}
}
}
}