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"
不同的核心混淆。
我想阻止 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"
不同的核心混淆。