PHPackages                             powar/json-validator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. powar/json-validator

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

powar/json-validator
====================

Simple Json validator for PHP. Very faster, easy to configuration.

1.0.0(7y ago)184.8k↓33.8%MITPHPPHP &gt;=7.1CI failing

Since Aug 7Pushed 3y ago1 watchersCompare

[ Source](https://github.com/iPowar/EasyJsonValidator)[ Packagist](https://packagist.org/packages/powar/json-validator)[ RSS](/packages/powar-json-validator/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (8)Dependencies (1)Versions (15)Used By (0)

Introduction
------------

[](#introduction)

EasyJsonValidator - simple Json validator for PHP. Very faster, easy to configuration. This validator work without JsonSchema().

Capability
----------

[](#capability)

1. Simple type check, like field `name` - string
2. Range check, like filed `number` - form 1 to 10, or field `date` -&gt; from 2019-01-01 to 2019-02-01
3. Require check, like field `id` is require
4. Nested objects check, like multidimensional array with all available validation
5. DateTime check in any date format
6. Check by pattern (preg\_match), like field `email` - `/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i`
7. Check by callback, like field `email` - `function($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); }`
8. Customisation error message for any rule

Installation
------------

[](#installation)

```
composer require powar/json-validator

```

Usage
-----

[](#usage)

**get any json**

```
$json = json_encode(['id' => 11, 'name' => 'JohnDoe', 'balance' => null, 'date' => date(DateTime::ISO8601)]);

```

**create rules**

```
$rules = [
    'id' => [
        Validator::KEY_TYPE => Validator::TYPE_INTEGER,
        Validator::KEY_MAX_VAL => 10,
    ],
    'name' => Validator::TYPE_STRING,
    'balance' => Validator::TYPE_NULL,
    'date' => Validator::TYPE_DATETIME,
];

```

**validate**

```
$validator = new \Powar\JsonValidator\Validator();
$validator->validate($json, $rules);

```

**check errors exist**

```
if ($validator->hasErrors()) {
    print_r($validator->getErrors());
}

array(1) {
   'id' =>
   string(20) "must be less than 10"
 }

```

Documentation
-------------

[](#documentation)

**Make rules**

The validate method takes a second parameter with array of rules for validation

simple example:

```
$rules = ['id' => 'int']
$validator->validate($json, $rules);

```

This rule will only check the incoming json for matching the *id:integer* field.

***Note, you can write explicitly 'int' or another type, but I recommend using Validator::TYPE** constants.*\*

example with constant:

```
$rules = ['id' => Validator::TYPE_INTEGER];

```

**List of constants for rules:**

typeconstantavailable configurationstringValidator::TYPE\_STRINGKEY\_REQUIRE, KEY\_MAX\_STR, KEY\_MIN\_STR, KEY\_PATTERN, KEY\_CALLBACK, KEY\_LABELintValidator::TYPE\_INTEGERKEY\_REQUIRE, KEY\_MAX\_STR, KEY\_MIN\_STR, KEY\_MIN\_VAL, KEY\_MAX\_VAL,KEY\_LABELnumberValidator::TYPE\_NUMBERKEY\_REQUIRE, KEY\_MAX\_VAL, KEY\_MIN\_VAL, KEY\_LABELboolValidator::TYPE\_BOOLEANKEY\_REQUIRE, KEY\_BOOL\_VAL, KEY\_LABELarrayValidator::TYPE\_ANYKEY\_REQUIRE, KEY\_LABELanyValidator::TYPE\_BOOLEANKEY\_REQUIRE, KEY\_CALLBACK, KEY\_LABELdatetimeValidator::TYPE\_DATETIMEKEY\_REQUIRE, KEY\_MIN\_VAL, KEY\_MAX\_VAL, KEY\_FORMAT, KEY\_LABELnullValidator::TYPE\_NULLKEY\_REQUIRE, KEY\_LABELexample with configure:

```
$rules = ['id' => [
            Validator::KEY_TYPE => Validator::TYPE_INTEGER,
            Validator::KEY_MAX_VAL => 10,
            ]
         ];

```

***Note that now id contains an array where the required key is Validator :: KEY\_TYPE, which must contain the type as in the simple case***

**List of constants for configure:**

constantstringreqiredescriptionValidator::KEY\_TYPEtype+required key if you use array with configuration ruleValidator::KEY\_LABELlabel-for customization error messageValidator::KEY\_REQUIRErequire-just checks whether json contains element. Default trueValidator::KEY\_MIN\_STRmin-str-Minimum number of characters (php `strlen`)Validator::KEY\_MAX\_STRmax-str-Maximum number of characters (php `strlen`)Validator::KEY\_MIN\_VALmin-val-Minimum value (php ``)Validator::KEY\_PATTERNpattern-check by regexp (php `preg_match`)Validator::KEY\_FORMATformat-create date object from json, by format (php `DateTime::createFromFormat`)Validator::KEY\_BOOLformat-create date object from json, by format (php `DateTime::createFromFormat`)Validator::KEY\_CALLBACKcallback-check by callback (php `is_callable` -&gt; `call`)Validator::KEY\_RULErule-include ruleSome examples
-------------

[](#some-examples)

You can use existence rule if you json contains included object

```
$someRule = [
    'some_field' => [
        Validator::KEY_TYPE => Validator::TYPE_INTEGER,
        Validator::KEY_MAX_VAL => 10,
        Validator::KEY_MAX_STR => 2,
    ],
    'some_date' => [
        Validator::KEY_TYPE => Validator::TYPE_DATETIME,
        Validator::KEY_FORMAT => 'Y-m-d\TH:i:sP',
        Validator::KEY_REQUIRE => false,
    ]
];

$rules = [
    'some_id' => Validator::TYPE_INTEGER,
    'some_clildren_element' => [
        Validator::KEY_TYPE => Validator::TYPE_ARRAY,
        Validator::KEY_RULE => $someRule,
    ]
];

```

Or you can create some small rules like this:

```
$idRule = [
        Validator::KEY_TYPE => Validator::TYPE_INTEGER,
        Validator::KEY_MIN_STR => 1,
        Validator::KEY_MAX_STR => 11,
];

$dateRule = [
    Validator::KEY_TYPE => Validator::TYPE_DATETIME,
    Validator::KEY_FORMAT => DateTime::ISO8601,
    Validator::KEY_REQUIRE => false,
];

```

And use it for any rules:

```
$rules = [
    'some_id' => $idRule,
    'some_date' => $dateRule,
];

```

***NOTE! In case when you create rule for TYPE\_DATETIME, you need be careful, because KEY\_MIN\_VAL and KEY\_MAX\_VAL can work is not obvious***

For Example, you need to create check for day of birth (Over 18 years of age, you know ;) )

```
$minDate = new DateTime();
$minDate->modify('-18 year');
$format = 'Y-m-d';

$rule = [
    'day_of_birth' => [
        Validator::KEY_TYPE => Validator::TYPE_DATETIME,
        Validator::KEY_FORMAT => $format,
        Validator::KEY_MIN_VAL => $minDate->format($format), //modify('-18 year');
$format = 'Y-m-d';

$rule = [
    'day_of_birth' => [
        Validator::KEY_TYPE => Validator::TYPE_DATETIME,
        Validator::KEY_FORMAT => $format,
        Validator::KEY_MAX_VAL => $minDate->format($format),
    ]
];

```

Callback example

```
 $rule = [
     'email' => [
         Validator::KEY_TYPE => Validator::TYPE_STRING,
         Validator::KEY_CALLBACK => function($email) {
            return filter_var($email, FILTER_VALIDATE_EMAIL);
         }
     ]
 ];

```

Custom error message

```
$someRule = [
    'some_field' => [
        Validator::KEY_TYPE => Validator::TYPE_INTEGER,
        Validator::KEY_MAX_VAL => 10,
        Validator::KEY_MAX_STR => 2,
        Validator::KEY_LABEL => 'validator.error.some_field',
    ],
];

```

getErrors() -&gt; `['some_field' => 'validator.error.some_field']`

**More examples you can see in unit tests**

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity31

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~58 days

Recently: every ~154 days

Total

12

Last Release

2565d ago

Major Versions

0.0.7 → 1.0.02019-05-10

PHP version history (2 changes)0.0.1PHP &gt;=5.3.3

1.0.0PHP &gt;=7.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/96ab21c277c3e70b8b1f8f376fedc6adcf5eb291eb8471ec24c865c20bf23f5a?d=identicon)[powar](/maintainers/powar)

---

Top Contributors

[![iPowar](https://avatars.githubusercontent.com/u/5306342?v=4)](https://github.com/iPowar "iPowar (22 commits)")

---

Tags

phpjsonvalidator

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/powar-json-validator/health.svg)

```
[![Health](https://phpackages.com/badges/powar-json-validator/health.svg)](https://phpackages.com/packages/powar-json-validator)
```

###  Alternatives

[johnstevenson/json-works

Create, edit, query and validate json

272.5M6](/packages/johnstevenson-json-works)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
