我想阻止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”} ,但它仍然成功验证了。
答案 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"
]
}