jsonpolice
A Javascript library implementing the JSON Schema draft 7.
The library can optionally decorate parsed objects in order to have them return default values defined in the schema, for
undefined properties.
![npm version](https://img.shields.io/npm/v/jsonpolice.svg)
Install
$ npm install jsonpolice
create(dataOrUri, options)
Create a new instance of schema validator.
dataOrUri
, the schema to parse or a fully qualified URI to pass to retriever
to download the schemaoptions
, parsing options, the following optional properties are supported:
scope
(required), the current resolution scope (absolute URL) of URLs and paths.registry
, an object to use to cache resolved id
and $ref
values. If no registry is passed,
one is automatically created. Pass a registry
if you are going to parse several schemas or URIs referencing
the same id
and $ref
values.retriever
, a function accepting a URL in input and returning a promise resolved to an object
representing the data downloaded for the URI. Whenever a $ref
to a new URI is found, if the URI is not
already cached in the store in use, it'll be fetched using this retriever
. If not retriever
is passed
and a URI needs to be downloaded, a no_retriever
exception is thrown. Refer to the documentation of
jsonref for sample retriever functions to use in the browser or
with Node.js.
The function returns a Promise resolving to a new instance of Schema. Once created, a schema instance can be used
repeatedly to validate data, calling the method Schema.validate
.
Example
import * as jp from 'jsonpolice';
(async () => {
const schema = jp.create({
type: 'object',
properties: {
d: {
type: 'string',
format: 'date-time'
},
i: {
type: 'integer'
},
b: {
type: [ 'boolean', 'number' ]
},
c: {
default: 5
}
}
});
try {
const result = await schema.validate({
d: (new Date()).toISOString(),
i: 6,
b: true
});
} catch(err) {
}
})();
Schema.validate(data [, options])
Validates the input data
data
, the data to parseoptions
, validation options, the following optional properties are supported:
setDefault
, if true
returns the default value specified in the schema (if any) for undefined propertiesremoveAdditional
, if true
deletes properties not validating against additionalProperties, without failingcontext
, if set to read
deletes writeOnly properties, if set to write
delete readOnly properties
Returns a decorated version of data, according to the specified options.
Example
Using the following schema:
{
type: 'object',
properties: {
d: {
type: 'string',
},
i: {
type: 'integer'
},
b: {
type: [ 'boolean', 'number' ]
},
c: {
default: 5
}
}
}
And parsing the following data:
var output = schema.validate({
d: 'test',
i: 10,
b: true
});
Produces the following output:
{
"d": "test",
"i": 10,
"b": true,
"c": 5
}