В момента изготвям схема на JSON за някои данни. Нека да кажем, че моята схема е в тази форма:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Title",
"type": "array",
"items": {
"type":"object",
"properties":{
"property1": {
"type": "string",
"enum": ["ALPHA", "BETA"]
},
"property2": {
"type": "string",
"enum": ["alpha", "beta"]
},
"val": {
"type": "number",
"min": 0,
"max": 100
}
},
"required": ["property1", "property2", "val"]
}
}
Въпросът ми е, възможно ли е да се уточни, че искаме всички възможни комбинации на property1
и property2
стойности (във всеки ред без повторения)? Стойността на val
почти сигурно няма да бъде уникален.
Всичко, за което се сещам, е да добавя "minItems": 4, "maxItems": 4,
в схемата над "items"
обект, но това означава само, че ще завършим с точно 4 предмета и не гарантира, че те ще бъдат уникални.
Не искам някой да напише цялата схема за мен, просто търся указатели към документацията или прости примери, които да ме тласнат в правилната посока.
Тестови случаи (включени за изясняване на моето мнение)
Това трябва да се провали, тъй като липсва една от комбинациите
{"data":[
{
"property1": "ALPHA",
"property2": "alpha",
"val": 7
},{
"property1": "ALPHA",
"property2": "beta"
"val": 16
},{
"property1": "BETA",
"property2": "alpha"
"val": 12
}
]}
Това трябва да се провали, тъй като една от комбинациите се повтаря
{"data":[
{
"property1": "ALPHA",
"property2": "alpha"
"val": 73
},{
"property1": "ALPHA",
"property2": "beta"
"val": 72
},{
"property1": "BETA",
"property2": "alpha"
"val": 73
},{
"property1": "BETA",
"property2": "beta"
"val": 71
},{
"property1": "ALPHA",
"property2": "beta"
"val": 68
}
]}
Това трябва да премине
{"data":[
{
"property1": "ALPHA",
"property2": "alpha"
"val": 26
},{
"property1": "ALPHA",
"property2": "beta"
"val": 26
},{
"property1": "BETA",
"property2": "alpha"
"val": 32
},{
"property1": "BETA",
"property2": "beta"
"val": 83
}
]}
Това също трябва да премине
{"data":[
{
"property1": "ALPHA",
"property2": "beta"
"val": 15
},{
"property1": "BETA",
"property2": "alpha"
"val": 6
},{
"property1": "ALPHA",
"property2": "alpha"
"val": 65
},{
"property1": "BETA",
"property2": "beta"
"val": 37
}
]}
Отговори:
0 за отговор № 1Стойностите на Enum могат да бъдат обекти, можете да ги използвате на ниво обект.
0 за отговор № 2
Почти съм сигурен, че може да се направи, но решениетоби било толкова сложно и нечетливо, че няма да си струва да се направи. Не мога да знам със сигурност във вашия случай, но обикновено ситуации като тази показват лош избор в начина, по който сте проектирали вашата структура на данни. Бих разгледал как можете да преструктурирате данните си.