Created
December 7, 2020 06:28
-
-
Save UtsavChokshiCNU/fa10ce66241752158cc0aae625061f4c to your computer and use it in GitHub Desktop.
Valdiating JSON schema using JSON Schema validator (AJV)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Install package before running this file : npm install ajv | |
// Node.js require: | |
var Ajv = require('ajv'); | |
var schema = { | |
"$schema": "http://json-schema.org/draft-07/schema#", | |
"$id": "http://example.com/example1.json", | |
"title": "Core schema meta-schema", | |
"definitions": { | |
"schemaArray": { | |
"type": "array", | |
"minItems": 1, | |
"items": { "$ref": "#" } | |
}, | |
"nonNegativeInteger": { | |
"type": "integer", | |
"minimum": 0 | |
}, | |
"nonNegativeIntegerDefault0": { | |
"allOf": [ | |
{ "$ref": "#/definitions/nonNegativeInteger" }, | |
{ "default": 0 } | |
] | |
}, | |
"simpleTypes": { | |
"enum": [ | |
"array", | |
"boolean", | |
"integer", | |
"null", | |
"number", | |
"object", | |
"string" | |
] | |
}, | |
"stringArray": { | |
"type": "array", | |
"items": { "type": "string" }, | |
"uniqueItems": true, | |
"default": [] | |
} | |
}, | |
"type": ["object", "boolean"], | |
"properties": { | |
"$id": { | |
"type": "string", | |
"format": "uri-reference" | |
}, | |
"$schema": { | |
"type": "string", | |
"format": "uri" | |
}, | |
"$ref": { | |
"type": "string", | |
"format": "uri-reference" | |
}, | |
"$comment": { | |
"type": "string" | |
}, | |
"title": { | |
"type": "string" | |
}, | |
"description": { | |
"type": "string" | |
}, | |
"default": true, | |
"readOnly": { | |
"type": "boolean", | |
"default": false | |
}, | |
"writeOnly": { | |
"type": "boolean", | |
"default": false | |
}, | |
"examples": { | |
"type": "array", | |
"items": true | |
}, | |
"multipleOf": { | |
"type": "number", | |
"exclusiveMinimum": 0 | |
}, | |
"maximum": { | |
"type": "number" | |
}, | |
"exclusiveMaximum": { | |
"type": "number" | |
}, | |
"minimum": { | |
"type": "number" | |
}, | |
"exclusiveMinimum": { | |
"type": "number" | |
}, | |
"maxLength": { "$ref": "#/definitions/nonNegativeInteger" }, | |
"minLength": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, | |
"pattern": { | |
"type": "string", | |
"format": "regex" | |
}, | |
"additionalItems": { "$ref": "#" }, | |
"items": { | |
"anyOf": [ | |
{ "$ref": "#" }, | |
{ "$ref": "#/definitions/schemaArray" } | |
], | |
"default": true | |
}, | |
"maxItems": { "$ref": "#/definitions/nonNegativeInteger" }, | |
"minItems": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, | |
"uniqueItems": { | |
"type": "boolean", | |
"default": false | |
}, | |
"contains": { "$ref": "#" }, | |
"maxProperties": { "$ref": "#/definitions/nonNegativeInteger" }, | |
"minProperties": { "$ref": "#/definitions/nonNegativeIntegerDefault0" }, | |
"required": { "$ref": "#/definitions/stringArray" }, | |
"additionalProperties": { "$ref": "#" }, | |
"definitions": { | |
"type": "object", | |
"additionalProperties": { "$ref": "#" }, | |
"default": {} | |
}, | |
"properties": { | |
"type": "object", | |
"additionalProperties": { "$ref": "#" }, | |
"default": {} | |
}, | |
"patternProperties": { | |
"type": "object", | |
"additionalProperties": { "$ref": "#" }, | |
"propertyNames": { "format": "regex" }, | |
"default": {} | |
}, | |
"dependencies": { | |
"type": "object", | |
"additionalProperties": { | |
"anyOf": [ | |
{ "$ref": "#" }, | |
{ "$ref": "#/definitions/stringArray" } | |
] | |
} | |
}, | |
"propertyNames": { "$ref": "#" }, | |
"const": true, | |
"enum": { | |
"type": "array", | |
"items": true, | |
"minItems": 1, | |
"uniqueItems": true | |
}, | |
"type": { | |
"anyOf": [ | |
{ "$ref": "#/definitions/simpleTypes" }, | |
{ | |
"type": "array", | |
"items": { "$ref": "#/definitions/simpleTypes" }, | |
"minItems": 1, | |
"uniqueItems": true | |
} | |
] | |
}, | |
"format": { "type": "string" }, | |
"contentMediaType": { "type": "string" }, | |
"contentEncoding": { "type": "string" }, | |
"if": { "$ref": "#" }, | |
"then": { "$ref": "#" }, | |
"else": { "$ref": "#" }, | |
"allOf": { "$ref": "#/definitions/schemaArray" }, | |
"anyOf": { "$ref": "#/definitions/schemaArray" }, | |
"oneOf": { "$ref": "#/definitions/schemaArray" }, | |
"not": { "$ref": "#" } | |
}, | |
"default": true | |
}; | |
var data = { | |
"$schema": "http://json-schema.org/draft-07/schema", | |
"$id": "http://example.com/example.json", | |
"type": "object", | |
"title": "The root schema", | |
"description": "The root schema comprises the entire JSON document.", | |
"default": {}, | |
"examples": [ | |
{ | |
"checked": false | |
} | |
], | |
"required": [ | |
"checked" | |
], | |
"properties": { | |
"checked": { | |
"$id": "#/properties/checked", | |
"type": "boolean", | |
"title": "The checked schema", | |
"description": "An explanation about the purpose of this instance.", | |
"default": false, | |
"examples": [ | |
false | |
], | |
"integration_hub": { | |
"secret": false | |
} | |
} | |
}, | |
"additionalProperties": true | |
}; | |
var ajv = new Ajv(); | |
// Using ajv's validate schema to validate JSON Schema | |
if(!ajv.validateSchema(data)){ | |
console.log("not ok"); | |
} | |
else{ | |
console.log("ok"); | |
} | |
// Using JSON schema's meta schema to validate JSON schema | |
var validate = ajv.compile(schema); | |
var valid = validate(data); | |
if (!valid) console.log(validate.errors); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment