the-json-library
v1.1.0
Published
A lightweight validation library, which validates JSON data against a JSON schema.
Downloads
5
Maintainers
Readme
The JSON Library
A lightweight JSON schema validation library for JavaScript that can be used in both browser and Node.js environments.
Features
- Validate JSON data against schemas
- No external dependencies
- Works in both browser and Node.js
- Supports common validation types and formats
- Comprehensive error reporting
- Small footprint
- Strict validation with additional properties control
Installation
npm install the-json-libraryUsage
Basic Usage
import { validate } from 'the-json-library';
// Define a schema
const schema = {
type: 'object',
required: ['name', 'email'],
properties: {
name: { type: 'string' },
email: { type: 'string', format: 'email' },
age: { type: 'integer', minimum: 0 }
}
};
// Validate some data
const data = {
name: 'John Doe',
email: '[email protected]',
age: 30
};
const result = validate(data);
if (result.isValid) {
console.log('Validation successful!');
} else {
console.error('Validation errors:', result.errors);
}Static Validation
You can also use the static method without creating an instance:
import { validate } from 'the-json-library';
const result = validate(data, schema);
if (result.isValid) {
console.log('Validation successful!');
} else {
console.error('Validation errors:', result.errors);
}Additional Properties Control
By default, the library rejects any properties not defined in the schema:
// Schema only defines name and email
const schema = {
type: 'object',
properties: {
name: { type: 'string' },
email: { type: 'string' }
}
};
// Data contains an extra property 'age'
const data = {
name: 'John Doe',
email: '[email protected]',
age: 30 // This will cause validation failure
};
const result = validate(data, schema);
// result.isValid will be false
// result.errors will contain an error about 'age' being an additional propertyTo allow additional properties, set additionalProperties to true:
const schema = {
type: 'object',
properties: {
name: { type: 'string' },
email: { type: 'string' }
},
additionalProperties: true // Allow any additional properties
};
// Now this will pass validation
const data = {
name: 'John Doe',
email: '[email protected]',
age: 30 // This is now allowed
};You can also provide a schema for additional properties:
const schema = {
type: 'object',
properties: {
name: { type: 'string' },
email: { type: 'string' }
},
// All additional properties must be numbers
additionalProperties: { type: 'number' }
};
// This will pass validation
const data = {
name: 'John Doe',
email: '[email protected]',
age: 30, // Valid additional property (number)
score: 95 // Valid additional property (number)
};Validation Result
The validation result contains:
isValid- boolean indicating if the validation passederrors- array of error objects with:path- the path to the property that failed validationmessage- description of the error
Supported Schema Features
Types
stringnumberintegerbooleanarrayobjectnull
String Validations
minLength/maxLength- string length constraintspattern- regular expression patternformat- predefined formats (email, date, date-time, uri)
Number Validations
minimum/maximum- value constraints
Object Validations
properties- schema for each propertyrequired- list of required propertiesadditionalProperties- controls whether properties not defined in the schema are allowed
Array Validations
items- schema for array items
Other Validations
enum- list of allowed values
Schema Format
Schemas should follow a simplified JSON Schema format. Here's an example of a more complex schema:
{
"type": "object",
"required": ["id", "name", "metadata"],
"properties": {
"id": { "type": "integer" },
"name": { "type": "string", "minLength": 1 },
"email": { "type": "string", "format": "email" },
"tags": {
"type": "array",
"items": { "type": "string" }
},
"metadata": {
"type": "object",
"properties": {
"created": { "type": "string", "format": "date-time" },
"status": { "enum": ["active", "inactive", "pending"] }
},
"additionalProperties": false
}
},
"additionalProperties": false // No additional root properties allowed
}License
MIT
