Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jsonrainbow/json-schema
PHP implementation of JSON schema. Fork of the http://jsonschemaphpv.sourceforge.net/ project
https://github.com/jsonrainbow/json-schema
jsonschema validation
Last synced: 3 days ago
JSON representation
PHP implementation of JSON schema. Fork of the http://jsonschemaphpv.sourceforge.net/ project
- Host: GitHub
- URL: https://github.com/jsonrainbow/json-schema
- Owner: jsonrainbow
- License: mit
- Created: 2011-03-16T02:15:33.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2024-11-24T22:14:54.000Z (18 days ago)
- Last Synced: 2024-12-06T23:28:50.043Z (5 days ago)
- Topics: jsonschema, validation
- Language: PHP
- Homepage:
- Size: 1020 KB
- Stars: 3,553
- Watchers: 52
- Forks: 357
- Open Issues: 30
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-php - JSON Schema - A [JSON Schema](https://json-schema.org/) validation library. (Table of Contents / Filtering and Validation)
- awesome-php - JSON Schema - A [JSON Schema](https://json-schema.org/) validation library. (Table of Contents / Filtering, Sanitizing and Validation)
README
# JSON Schema for PHP
[![Build Status](https://github.com/jsonrainbow/json-schema/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/jsonrainbow/json-schema/actions)
[![Latest Stable Version](https://poser.pugx.org/justinrainbow/json-schema/v/stable)](https://packagist.org/packages/justinrainbow/json-schema)
[![Total Downloads](https://poser.pugx.org/justinrainbow/json-schema/downloads)](https://packagist.org/packages/justinrainbow/json-schema/stats)A PHP Implementation for validating `JSON` Structures against a given `Schema` with support for `Schemas` of Draft-3 or Draft-4. Features of newer Drafts might not be supported. See [Table of All Versions of Everything](https://json-schema.org/specification-links.html#table-of-all-versions-of-everything) to get an overview of all existing Drafts.
See [json-schema](http://json-schema.org/) for more details.
## Installation
### Library
```bash
git clone https://github.com/jsonrainbow/json-schema.git
```### Composer
[Install PHP Composer](https://getcomposer.org/doc/00-intro.md)
```bash
composer require justinrainbow/json-schema
```## Usage
For a complete reference see [Understanding JSON Schema](https://json-schema.org/understanding-json-schema/).
__Note:__ features of Drafts newer than Draft-4 might not be supported!
### Basic usage
```php
validate($data, (object)['$ref' => 'file://' . realpath('schema.json')]);if ($validator->isValid()) {
echo "The supplied JSON validates against the schema.\n";
} else {
echo "JSON does not validate. Violations:\n";
foreach ($validator->getErrors() as $error) {
printf("[%s] %s\n", $error['property'], $error['message']);
}
}
```### Type coercion
If you're validating data passed to your application via HTTP, you can cast strings and booleans to
the expected types defined by your schema:```php
"true",
'refundAmount'=>"17"
];$validator->validate(
$request, (object) [
"type"=>"object",
"properties"=>(object)[
"processRefund"=>(object)[
"type"=>"boolean"
],
"refundAmount"=>(object)[
"type"=>"number"
]
]
],
Constraint::CHECK_MODE_COERCE_TYPES
); // validates!is_bool($request->processRefund); // true
is_int($request->refundAmount); // true
```A shorthand method is also available:
```PHP
$validator->coerce($request, $schema);
// equivalent to $validator->validate($data, $schema, Constraint::CHECK_MODE_COERCE_TYPES);
```### Default values
If your schema contains default values, you can have these automatically applied during validation:
```php
17
];$validator = new Validator();
$validator->validate(
$request,
(object)[
"type"=>"object",
"properties"=>(object)[
"processRefund"=>(object)[
"type"=>"boolean",
"default"=>true
]
]
],
Constraint::CHECK_MODE_APPLY_DEFAULTS
); //validates, and sets defaults for missing propertiesis_bool($request->processRefund); // true
$request->processRefund; // true
```### With inline references
```php
addSchema('file://mySchema', $jsonSchemaObject);// Provide $schemaStorage to the Validator so that references can be resolved during validation
$jsonValidator = new Validator(new Factory($schemaStorage));// JSON must be decoded before it can be validated
$jsonToValidateObject = json_decode('{"data":123}');// Do validation (use isValid() and getErrors() to check the result)
$jsonValidator->validate($jsonToValidateObject, $jsonSchemaObject);
```### Configuration Options
A number of flags are available to alter the behavior of the validator. These can be passed as the
third argument to `Validator::validate()`, or can be provided as the third argument to
`Factory::__construct()` if you wish to persist them across multiple `validate()` calls.| Flag | Description |
|------|-------------|
| `Constraint::CHECK_MODE_NORMAL` | Validate in 'normal' mode - this is the default |
| `Constraint::CHECK_MODE_TYPE_CAST` | Enable fuzzy type checking for associative arrays and objects |
| `Constraint::CHECK_MODE_COERCE_TYPES` | Convert data types to match the schema where possible |
| `Constraint::CHECK_MODE_EARLY_COERCE` | Apply type coercion as soon as possible |
| `Constraint::CHECK_MODE_APPLY_DEFAULTS` | Apply default values from the schema if not set |
| `Constraint::CHECK_MODE_ONLY_REQUIRED_DEFAULTS` | When applying defaults, only set values that are required |
| `Constraint::CHECK_MODE_EXCEPTIONS` | Throw an exception immediately if validation fails |
| `Constraint::CHECK_MODE_DISABLE_FORMAT` | Do not validate "format" constraints |
| `Constraint::CHECK_MODE_VALIDATE_SCHEMA` | Validate the schema as well as the provided document |Please note that using `CHECK_MODE_COERCE_TYPES` or `CHECK_MODE_APPLY_DEFAULTS` will modify your
original data.`CHECK_MODE_EARLY_COERCE` has no effect unless used in combination with `CHECK_MODE_COERCE_TYPES`. If
enabled, the validator will use (and coerce) the first compatible type it encounters, even if the
schema defines another type that matches directly and does not require coercion.## Running the tests
```bash
composer test # run all unit tests
composer testOnly TestClass # run specific unit test class
composer testOnly TestClass::testMethod # run specific unit test method
composer style-check # check code style for errors
composer style-fix # automatically fix code style errors
```