请求有关JSON Schema验证的帮助,下面是示例JSON和Schema . 我试图找出如何指定“ppd”架构规则,具体而言“cfg”是String,String的映射,需要通过Enum定义进一步限制此映射中键和值的条目,即“inputDateTimeFormat”的允许值是一个有效的日期时间格式,因此如果key是“inputDateTimeFormat”,则规则应编码,然后允许值是模式匹配日期时间格式,类似地,如果key是“valuemapping”,则允许值是模式匹配k = v(下面的示例) .
你能建议一个实现这个目标的方法吗?
JSON示例 -
{
"sm": [
{
"mid": "id-1",
"ppd": [
{
"name": "cc-1",
"cfg": {
"columns": "v-1",
"valueMapping": "B=01;S=02"
}
},
{
"name": "cc-2",
"cfg": {
"columns": "v-2",
"inputDateTimeFormat": "ddMMMyyyy_HH:mm:ss.SSSSSS",
"outputDateTimeFormat": "yyyy-MM-dd'T'HH:mm:Ss.SSSZ"
}
},
{
"name": "cc-3",
"cfg": {
"columns": "v-3;v-4",
"markers": "d=01"
}
}
]
}
]
}
JSON架构:
{
"type": "object",
"$schema": "http://json-schema.org/draft-06/schema",
"id": "source-mappings-schema",
"required": true,
"properties": {
"sm": {
"type": "array",
"id": "source-mappings-schema/sm",
"required": true,
"items": {
"type": "object",
"id": "source-mappings-schema/sm/0",
"required": true,
"properties": {
"mappingId": {
"type": "string",
"id": "source-mappings-schema/sm/0/mappingId",
"required": true
},
"ppd": {
"type": "array",
"id": "source-mappings-schema/sm/0/ppd",
"required": true,
"items": {
"type": "object",
"id": "source-mappings-schema/sm/0/ppd/0",
"required": true,
"properties": {
"name": {
"type": "string",
"id": "source-mappings-schema/sm/0/ppd/0/name",
"required": true
},
"cfg": {
"type": "array",
"id": "source-mappings-schema/sm/0/ppd/0/cfg",
"required": true,
"items": {
"type": "string"
}
}
}
}
}
}
}
}
}
}
1 回答
从您的架构开始包含一些问题 .
$ schema标签是错误的,它应该是
'required'属性应该是一个必需的属性名称数组(不是bool),所以你需要在上面的级别应用它 .
最后验证cfg . 通过为'additionalProperties'指定模式,您可以为所有未指定的键值提供验证规则(您说它是字符串的映射,所以我将其设置为字符串,但您也可以在此处添加其他规则,如最大长度等) . 对于您了解的密钥,您可以使用认可的验证规则为每个密钥添加一个属性(我添加的规则演示了这个概念,需要调整以供您使用) .