Fork me on GitHub

Type-specific keywordsΒΆ

The type keyword is fundamental to JSON Schema. It specifies the data type for a schema.

At its core, JSON Schema defines the following basic types:

These types have analogs in most programming languages, though they may go by different names.

The following table maps from the names of JavaScript types to their analogous types in Python:

JavaScript Python
string string [4]
number int/float [5]
object dict
array list
boolean bool
null None

Footnotes

[4]Since JavaScript strings always support unicode, they are analogous to unicode on Python 2.x and str on Python 3.x.
[5]JavaScript does not have separate types for integer and floating-point.

The following table maps from the names of JavaScript types to their analogous types in Ruby:

JavaScript Ruby
string String
number Integer/Float [6]
object Hash
array Array
boolean TrueClass/FalseClass
null NilClass

Footnotes

[6]JavaScript does not have separate types for integer and floating-point.

The type keyword may either be a string or an array:

  • If it’s a string, it is the name of one of the basic types above.
  • If it is an array, it must be an array of strings, where each string is the name of one of the basic types, and each element is unique. In this case, the JSON snippet is valid if it matches any of the given types.

Here is a simple example of using the type keyword:

{ "type": "number" }
42
42.0

This is not a number, it is a string containing a number.

"42"

In the following example, we accept strings and numbers, but not structured data types:

{ "type": ["number", "string"] }
42
"Life, the universe, and everything"
["Life", "the universe", "and everything"]

For each of these types, there are keywords that only apply to those types. For example, numeric types have a way of specifying a numeric range, that would not be applicable to other types. In this reference, these validation keywords are described along with each of their corresponding types in the following chapters.