JSON 当 "type"="string" 时对 null 的架构验证

JSON schema validation for null when "type"="string"

我想阻止 json 文件允许 null 作为它的有效值。 尝试使用关键字 not,但没有成功。

希望下面的 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"},但它仍然验证成功。

您可以使用 "enum" 关键字代替 "type"。 "null" 不是有效的 json 和 json-架构类型。

此外,additionalProperties 和 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"
    ]
}

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

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

但是,在示例代码段中,您提到了如下内容--

{ "stats": "null" }

因此,如果您真的希望您的文件中不允许使用 null,那么您的示例文件应该类似于 { "stats": null } 根据我提供的架构。

哇。这里有很多混乱。

问题很简单:

{
  "stats": "null"
}

"null" 是一个字符串,因此它是有效的(因为您允许使用字符串)。这不会被您的模式所允许,它按您预期的那样工作:

{
    stats: null
}

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

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