У меня есть два типа наборов данных, с данными CSV или фиксированной длины. В данных csv список полей - это просто список имен, в то время как в данных фиксированной длины каждое поле определяется fieldName и fieldLength. Мне нужна схема json для проверки обоих случаев, но после попытки нескольких решений, включая эти , я не уверен, что это можно сделать. Или, может быть, мое понимание схемы JSON все еще далеко от совершенства.
json:
{
"dataset": "csv data",
"dataFormat": "csv",
"fieldList": [{
"fieldName": "id"
},
{
"fieldName": "num"
},
{
"fieldName": "struct"
}
]
}
{
"dataset": "fixed length",
"dataFormat": "fixed",
"fieldList": [{
"fieldName": "id",
"fieldLength": 13
},
{
"fieldName": "num"
},
{
"fieldName": "struct"
}
]
}
JSON схема:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": [
"dataset",
"dataFormat",
"fieldList"
],
"properties": {
"dataset": {
"$id": "#/properties/dataset",
"type": "string"
},
"dataFormat": {
"$id": "#/properties/dataFormat",
"type": "string",
"enum": [
"csv",
"fixed"
]
},
"fieldList": {
"$id": "#/properties/fieldList",
"type": "array",
"additionalItems": true,
"items": {
"$id": "#/properties/fieldList/items",
"type": "object",
"additionalProperties": true,
"required": [
"fieldName"
],
"if": {
"properties": {
"dataFormat": {
"const": "fixed"
}
}
},
"then": {"items":{
"required": [
"fieldLength"
]}
},
"properties": {
"fieldName": {
"$id": "#/properties/fieldList/items/properties/fieldName",
"type": "string"
},
"fieldLength": {
"$id": "#/properties/fieldList/items/properties/fieldLength",
"type": "integer"
}
}
}
}
}
}
Оба документа положительно проверены, даже если в «фиксированном» типе только первый элемент включает в себя обязательное полеLength. Любое предложение ?