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

25.9k Views Asked by At

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.

3

There are 3 best solutions below

0
On BEST ANSWER

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".

3
On

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"
    ]
}
0
On

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.