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

时间:2017-11-22 15:50:55

标签: json jsonschema

请求有关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"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

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

$ schema标签错误,应该是

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

需要' property应该是一个必需的属性名称数组(不是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]"
                                    }
                                }
                            }