krydos/json-rules-checker

A little library for checking JSON object via rules

dev-master 2015-03-24 12:33 UTC

This package is not auto-updated.

Last update: 2024-04-27 13:39:24 UTC


README

This is small library for validation JSON objects in PHP (via regex). You can describe required attributes and check it on requred values.

INSTALLATION

Please update your composer.json. Add this to your require section

"krydos/json-rules-checker":"dev-master"

WHY DO I NEED THIS

Very often I have a code like this:

try {
    $json = json_decode(getJsonStringFromAnyPlace());

    if(isset($json->attr1)) {
        // do something with $json->attr1
        
        if(isset($json->attr2)) {
            //do something with $json->attr2
        }
        else {
            throw new Exception('attr2 required');
        }
    }
    else {
        throw new Exception('attr1 required');
    }
}
catch(Exception $e) {
    // do something
}

I really don't like it. I wrote this library because I want to validate JSON using some rules.

Like that:

try {
    $json = json_decode(getJsonStringFromAnyPlace());
    // let's imagine that JSON looks something like this:
    // {"root":{"attr1":"value1", "attr2":"value2", "attr3":{"attr3_1":"123"}}}
    
    // let's write a rules
    $rules = array(
        'root' => array(
            'attr1' => '/^value1$/',
            'attr2' => '', // if you don't care what value has this attribute 
                           // then just use empty string
            'attr3' => array(
                'attr3_1'=>'/^\d+$/' // just use regex for value validating
            )
        )
    );
    
    $validation_result = \JSONRulesChecker\JSONChecker::checkJSON($json, $rules); // return true
    if(!$validation_result) {
        throw new Excpetion('Please check you params');
    }
}
catch(Exception $e) {
    //do something
}

I like it :)

So, how to use it

  • create a JSON object via json_decode() or other functions
  • describe rules for your JSON object (just a PHP array as you can see above)
  • call the rules checker and pass your JSON object and rules into checker like that:
\JSONRulesChecker\JSONChecker::checkJSON($json, $rules);
  • by default checker expects that you described only required attributes in the rules array. This means that matching are not strict. For example if you JSON object has 3 keys but your rules array has only 2 (which matches with JSON) then checker will return true. So if you want to use STRICT matching then you can pass true as third parameter into checkJSON() function like this:
\JSONRulesChecker\JSONChecker::checkJSON($json, $rules, true);

Thanks

@Sbrilenko - for regex idea

Please feel free to Pull Requests

<3