“type”=“string”时,对于null的JSON模式验证

时间:2015-06-25 05:09:45

标签: java json validation jsonschema

我想阻止json提交允许null作为它的有效值。 尝试使用关键字,但没有运气。

希望将以下json验证为false,将 stats 字段验证为null。

{
  "stats": "null"
}

请在下面找到我的架构: -

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "http://jsonschema.net#",
  "type": "object",
  "additionalProperties": false,
  "maxProperties": 1,
  "properties": {
    "stats": {
      "id": "http://jsonschema.net/stats#",
      "type": "string",
      "maxLength": 5,
      "minLength": 2,
      "additionalProperties": false,
      "maxProperties": 1,
      "not": {"type":  "null"}
    }
  },

  "required": [
    "stats"
  ]
}

虽然我给了“not”:{“type”:“null”} ,但它仍然成功验证了。

3 个答案:

答案 0 :(得分:3)

首先,null不是String。因此,请尝试在您的架构中使用以下内容 -

 "stats": {
  "id": "http://jsonschema.net/stats#",
  "type": "string",
  "maxLength": 5,
  "minLength": 2,
  "additionalProperties": false,
  "maxProperties": 1,
  "not": {"type":  null}
}

但是,在示例代码段中,您提到了类似下面的内容 -

{ "stats": "null" }

因此,如果您真的希望在文件中不允许null,那么您的示例文件应该看起来像{ "stats": null } 我提供的模式。

答案 1 :(得分:3)

哇。这里有太多混乱。

问题很简单:

{
  "stats": "null"
}

"null"是一个字符串,因此它是有效的(因为你允许字符串)。您的架构不允许这样做,它可以按预期工作:

{
    stats: null
}

Ashish Patil的答案是错误的:在您的架构(而不是您的数据)中,当您指定类型时,类型名称是一个字符串。指定"not": {"type": null}无效。你可以指定"not": {"type": "null"},但这是多余的,因为早先的"type": "string"已经暗示了这一点。

jruizaranguren接受的答案有效,因为它不允许字符串 "null"。它没有解决null"null"不同的核心混淆。

答案 2 :(得分:2)

你可以使用" enum"关键字而不是"键入"。 "空"不是有效的json和json-schema类型。

此外,其他属性和maxProperties在统计信息描述中无用。

{
    "$schema" : "http://json-schema.org/draft-04/schema#",
    "id" : "http://jsonschema.net#",
    "type" : "object",
    "additionalProperties" : false,
    "maxProperties" : 1,
    "properties" : {
        "stats" : {
            "id" : "http://jsonschema.net/stats#",
            "type" : "string",
            "maxLength" : 5,
            "minLength" : 2
            "not" : {
                "enum" : ["null"]
            }

        }
    }, 
    "required" : [
        "stats"
    ]
}