krydos/json-rules-checker

一个小型库,用于通过规则检查JSON对象

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

This package is not auto-updated.

Last update: 2024-09-14 15:22:55 UTC


README

Build Status JSONRulesChecker

这是一个用于在PHP中(通过正则表达式)验证JSON对象的小型库。您可以描述所需的属性并在所需值上检查它们。

安装

请更新您的composer.json文件。将以下内容添加到您的require部分

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

我为什么需要这个

我经常遇到这样的代码

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
}

我真的很不喜欢它。我写这个库是因为我想使用一些规则来验证JSON。

就像这样

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
}

我喜欢它 :)

那么,如何使用它

  • 通过json_decode()或其他函数创建JSON对象
  • 描述您JSON对象的规则(就像您上面看到的那样,只是一个PHP数组)
  • 调用规则检查器,并将您的JSON对象和规则传递给检查器,如下所示
\JSONRulesChecker\JSONChecker::checkJSON($json, $rules);
  • 默认情况下,检查器期望您只在规则数组中描述了所需的属性。这意味着匹配不是严格的。例如,如果您的JSON对象有3个键,但您的规则数组只有2个(与JSON匹配),那么检查器将返回true。所以,如果您想使用严格匹配,则可以将true作为第三个参数传递给checkJSON()函数,如下所示
\JSONRulesChecker\JSONChecker::checkJSON($json, $rules, true);

谢谢

@Sbrilenko - 对于正则表达式的想法

请随时提交Pull Requests

<3