请求有关JSON Schema验证的帮助,下面是示例JSON和Schema。我想弄清楚如何指定" ppd"特别是架构规则" cfg"是String,String的映射,需要通过枚举定义进一步限制此映射中键和值的条目,即" inputDateTimeFormat"是一个有效的日期时间格式,因此规则应该编码,如果键是" inputDateTimeFormat"那么允许值是模式匹配日期时间格式,类似地,如果键是"值映射"那么允许的值是模式匹配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"
}
}
}
}
}
}
}
}
}
}
答案 0 :(得分:0)
从您的架构开始包含一些问题。
$ schema标签错误,应该是
"$schema": "http://json-schema.org/draft-06/schema#",
需要' property应该是一个必需的属性名称数组(不是bool),所以你需要在上面的级别应用它。
最后验证cfg。通过为' additionalProperties'指定架构你可以为所有未指定的键值提供验证规则(你说它是字符串的映射,所以我将它设置为字符串,但你也可以在这里添加其他规则,如最大长度等)。 对于您了解的密钥,您可以使用认可的验证规则为每个密钥添加一个属性(我添加的规则演示了这个概念,需要调整以供您使用)。
"cfg": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"properties": {
"inputDateTimeFormat": {
"type": "string",
"format": "date-time"
},
"valuemapping": {
"type": "string",
"pattern": "[a-z]\\=[a-z]"
}
}
}