Manu
Manu

Reputation: 1369

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

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

Answers (3)

Nate
Nate

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

Ashish Patil
Ashish Patil

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

jruizaranguren
jruizaranguren

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

Related Questions