使用AJV在json模式中进行空值验证

时间:2017-08-25 19:50:24

标签: json ajv

我正在使用Ajv来验证我的JSON数据。我无法找到一种方法来验证空字符串作为键的值。我尝试使用模式,但它没有发出适当的消息。

这是我的架构

{
    "type": "object",
    "properties": {
        "user_name": { "type": "string" , "minLength": 1},
        "user_email": { "type": "string" , "minLength": 1},
        "user_contact": { "type": "string" , "minLength": 1}
    },
    "required": [ "user_name", 'user_email', 'user_contact']
}

我使用minLength检查该值是否应至少包含一个字符。但它也允许空的空间。

4 个答案:

答案 0 :(得分:5)

你可以这样做:

ajv.addKeyword('isNotEmpty', {
  type: 'string',
  validate: function (schema, data) {
    return typeof data === 'string' && data.trim() !== ''
  },
  errors: false
})

在json架构中:

{
  [...]
  "type": "object",
  "properties": {
    "inputName": {
      "type": "string",
      "format": "url",
      "isNotEmpty": true,
      "errorMessage": {
        "isNotEmpty": "...",
        "format": "..."
      }
    }
  }
}

答案 1 :(得分:2)

我发现另一种方法是使用"而不是"关键字" maxLength":

{
  [...]
  "type": "object",
  "properties": {
    "inputName": {
      "type": "string",
      "allOf": [
        {"not": { "maxLength": 0 }, "errorMessage": "..."},
        {"minLength": 6, "errorMessage": "..."},
        {"maxLength": 100, "errorMessage": "..."},
        {"..."}
      ]
    },
  },
  "required": [...]
}

不幸的是,如果某人用空格填充该字段,则因空格计为字符而有效。这就是为什么我更喜欢ajv.addKeyword(' isNotEmpty',...)方法,它可以在验证之前使用trim()函数。

干杯!

答案 2 :(得分:1)

目前在AJV中没有内置选项可以这样做。

答案 3 :(得分:0)

现在可以使用ajv-keywords来实现。
它是可用于ajv验证程序的自定义模式的集合。

将架构更改为

./mvnw -pl *-common -pl *jdbc-autoconfig dependency:tree -Dincludes=org.springframework  | tee

使用ajv关键字

{
  "type": "object",
  "properties": {
    "user_name": {
      "type": "string",
      "allOf": [
        {
          "transform": [
            "trim"
          ]
        },
        {
          "minLength": 1
        }
      ]
    },
   // other properties
  }
}

transform关键字指定在验证之前要执行的转换。