Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 388
Manu Avatar asked Jun 25 '15 05:06

Manu


2 Answers

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

like image 81
Nate Avatar answered Nov 10 '22 13:11

Nate


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.

like image 30
Ashish Patil Avatar answered Nov 10 '22 14:11

Ashish Patil