Additional Resources

Version 2.0.0 Upgrade Notes

Please be aware that the upgrade to version 2.0.0 will use Draft-04 by
default, so schemas that do not declare a validator using the $schema
keyword will use Draft-04 now instead of Draft-03. This is the reason for the
major version upgrade.

Installation

From rubygems.org:

gem install json-schema

From the git repo:

$ gem build json-schema.gemspec
$ gem install json-schema-2.5.2.gem

Validation

Three base validation methods exist:

validate: returns a boolean on whether a validation attempt passes

validate!: throws a JSON::Schema::ValidationError with an appropriate message/trace on where the validation failed

fully_validate: builds an array of validation errors return when validation is complete

All methods take two arguments, which can be either a JSON string, a file
containing JSON, or a Ruby object representing JSON data. The first argument to
these methods is always the schema, the second is always the data to validate.
An optional third options argument is also accepted; available options are used
in the examples below.

By default, the validator uses the JSON Schema Draft
4 specification for
validation; however, the user is free to specify additional specifications or
extend existing ones. Legacy support for Draft 1, Draft 2, and Draft 3 is
included by either passing an optional :version parameter to the validate
method (set either as :draft1 or draft2), or by declaring the $schema
attribute in the schema and referencing the appropriate specification URI. Note
that the $schema attribute takes precedence over the :version option during
parsing and validation.

Custom format validation

The JSON schema standard allows custom formats in schema definitions which
should be ignored by validators that do not support them. JSON::Schema allows
registering procs as custom format validators which receive the value to be
checked as parameter and must raise a JSON::Schema::CustomFormatError to
indicate a format violation. The error message will be prepended by the property
name, e.g. The property '#a'

Controlling Remote Schema Reading

In some cases, you may wish to prevent the JSON Schema library from making HTTP
calls or reading local files in order to resolve $ref schemas. If you fully
control all schemas which should be used by validation, this could be
accomplished by registering all referenced schemas with the validator in
advance:

The JSON::Schema::Reader interface requires only an object which responds to
read(string) and returns a JSON::Schema instance. See the API
documentation
for more information.

JSON Backends

The JSON Schema library currently supports the json and yajl-ruby backend
JSON parsers. If either of these libraries are installed, they will be
automatically loaded and used to parse any JSON strings supplied by the user.

If more than one of the supported JSON backends are installed, the yajl-ruby
parser is used by default. This can be changed by issuing the following before
validation:

JSON::Validator.json_backend =:json

Optionally, the JSON Schema library supports using the MultiJSON library for
selecting JSON backends. If the MultiJSON library is installed, it will be
autoloaded.

Notes

The 'format' attribute is only validated for the following values:

date-time

date

time

ip-address (IPv4 address in draft1, draft2 and draft3)

ipv4 (IPv4 address in draft4)

ipv6

uri

All other 'format' attribute values are simply checked to ensure the instance
value is of the correct datatype (e.g., an instance value is validated to be an
integer or a float in the case of 'utc-millisec').

Additionally, JSON::Validator does not handle any json hyperschema attributes.