Я работаю с JSON Схема 4, и у меня возникла проблема, я не могу полностью разобраться. В приведенной ниже схеме вы увидите массив metricsGroups
, где любой элемент должен в точности равняться oneOf
определенной подсхеме. Внутри подсхем вы заметите, что они оба имеют общее имя свойства timestamp
, но metricsGroupOne
имеет свойства temperature
и humidity
, а metricsGroupTwo
имеет свойства PIR
и CO2
. Все свойства в обоих metricsGroups
являются обязательными.
Пожалуйста, смотрите схему ниже. Ниже схемы приведен пример некоторых данных, которые я ожидаю проверить, но вместо этого они будут считаться недействительными и объяснение моей проблемы.
{
"type": "object",
"properties": {
"uniqueId": {
"type": "string"
},
"metricsGroups": {
"type": "array",
"minItems": 1,
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"metricsGroupOne": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time"
},
"temperature": {
"type": "number"
},
"humidity": {
"type": "array",
"items": {
"type": "number"
}
}
},
"additionalProperties": false,
"required": [
"timestamp",
"temperature",
"humidity"
]
}
}
},
"required": [
"metricsGroupOne"
]
},
{
"type": "object",
"properties": {
"metricsGroupTwo": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"timestamp": {
"type": "string",
"format": "date-time"
},
"PIR": {
"type": "array",
"items": {
"type": "number"
}
},
"CO2": {
"type": "number"
}
},
"additionalProperties": false,
"required": [
"timestamp",
"PIR",
"CO2"
]
}
}
},
"required": [
"metricsGroupTwo"
]
}
]
}
}
},
"additionalProperties": false,
"required": [
"uniqueId",
"metricsGroups"
]
}
Вот некоторые данные, которые, по моему мнению, должны быть действительными:
{
"uniqueId": "d3-52-f8-a1-89-ee",
"metricsGroups": [
{
"metricsGroupOne": [
{"timestamp": "2020-03-04T12:34:00Z", "temperature": 32.5, "humidity": [45.0] }
],
"metricsGroupTwo": [
{"timestamp": "2020-03-04T12:34:00Z", "PIR": [16, 20, 7], "CO2": 653.76 }
]
}
]
}
Проблема, с которой я сталкиваюсь, заключается в том, что оба массива metricsGroup
в моих, как полагают, действительных данных, проверяют обе подсхемы - это затем делает данные недействительными из-за использования oneOf
ключевое слово. Я не понимаю, как запись для metricsGroupOne
проверяется по схеме для metricsGroupTwo
, так как имена свойств различаются, и наоборот.
Я использую библиотеку узлов под капотом, которая выдает эту ошибку, но я также проверил, что такая же ошибка возникает на некоторых веб-сайтах онлайн-проверки:
Любая помощь приветствуется. Спасибо, Адам