Reputation: 1369
I wanted to prevent a json filed from allowing null as a valid value for it. Tried using the keyword not, but no luck.
Want the below json to be validated as false, as the field stats as value as null.
{
"stats": "null"
}
please find my schema below:-
{
"$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"
]
}
Though i gave "not": {"type": "null"}, it still validated successfully.
Upvotes: 7
Views: 29209
Reputation: 19030
Wow. So much confusion here.
The problem is simple:
{
"stats": "null"
}
"null"
is a string, thus it’s valid (because you allow strings). This would not be allowed by your schema, which works as you expect:
{
stats: null
}
The answer from Ashish Patil is wrong: in your schema (not your data), when you are specifying the type, the type name is a string. Specifying "not": {"type": null}
is not valid. You could specify "not": {"type": "null"}
, but that would be redundant as the earlier "type": "string"
already implies that.
The accepted answer from jruizaranguren works because it doesn’t allow the string "null"
. It doesn’t address the core confusion that null
is not the same as "null"
.
Upvotes: 8
Reputation: 4614
First of all, null is not a String. So try using below in your schema--
"stats": {
"id": "http://jsonschema.net/stats#",
"type": "string",
"maxLength": 5,
"minLength": 2,
"additionalProperties": false,
"maxProperties": 1,
"not": {"type": null}
}
But, in the example snippet you have mentioned something like below--
{
"stats": "null"
}
So, if you really wanted null to be not allowed in your file, then your example file should look like {
"stats": null
}
Along schema i have provided.
Upvotes: 3
Reputation: 13605
You can use "enum" keyword instead of "type". "null" is not a valid json and json-schema type.
Also additionalProperties and maxProperties are useless within stats description.
{
"$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"
]
}
Upvotes: 3