首页 文章

使用Enum约束的字符串Map进行JSON模式验证

提问于
浏览
0

请求有关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 回答

  • 0

    从您的架构开始包含一些问题 .

    $ schema标签是错误的,它应该是

    "$schema": "http://json-schema.org/draft-06/schema#",
    

    'required'属性应该是一个必需的属性名称数组(不是bool),所以你需要在上面的级别应用它 .

    最后验证cfg . 通过为'additionalProperties'指定模式,您可以为所有未指定的键值提供验证规则(您说它是字符串的映射,所以我将其设置为字符串,但您也可以在此处添加其他规则,如最大长度等) . 对于您了解的密钥,您可以使用认可的验证规则为每个密钥添加一个属性(我添加的规则演示了这个概念,需要调整以供您使用) .

    enter image description here

    "cfg": {
                                    "type": "object",
                                    "additionalProperties": {
                                        "type": "string"
                                    },
                                    "properties": {
                                        "inputDateTimeFormat": {
                                            "type": "string",
                                            "format": "date-time"
                                        },
                                        "valuemapping": {
                                            "type": "string",
                                            "pattern": "[a-z]\\=[a-z]"
                                        }
                                    }
                                }
    

相关问题