json-schema-php:JSON 结构验证 PHP 实现

jopen 10年前

JSON Schema 用于描述JSON数据的结构和类型。如同DTD与XML的关系。

本实现用于使用 PHP 调用 JSON Schema 对 JSON 数据进行验证。

包括 PHP 和 PHP扩展 ,建议PHP版本 PHP 5 >= 5.2.0、PECL json >= 1.2.0。

生成 JSON Schema

由JSON生成一个全格式的Schema,方便编辑修改(勿随便直接使用在实践中)。

$value = new stdClass();  $value->name = 'a name';  $value->age = 23;  $value->height = 183.5;  $jsonSchema = new JsonSchema(json_encode($value));  echo $jsonSchema->getSchema();

结果(真实结果格式化后)

{     "type":"object",     "properties":{        "name":{           "type":"string",           "format":"regex",           "pattern":"\/^[a-z0-9]+$\/i",           "minLength":0,           "maxLength":2147483647        },        "age":{           "type":"integer",           "default":0,           "minimum":0,           "maximum":2147483647,           "exclusiveMinimum":0,           "exclusiveMaximum":2147483647        },        "height":{           "type":"number",           "default":0,           "minimum":0,           "maximum":2147483647,           "exclusiveMinimum":0,           "exclusiveMaximum":2147483647        }     }  }

 

使用 JSON Schema 验证 JSON

$userType = '       {          "id": "user",          "description": "user info",          "type": "object",          "properties": {              "account": {"type": "string"},              "email": {"type": "string", "required": true},              "noexist": {"type": "string", "required": false}          }      }';    $type = array();  $type['users'][] = array('account' => 'userA', 'email' => 'userA@example.com');  $type['users'][] = array('account' => 'userB', 'email' => 'userB@example.com');  $type['users'][] = array('account' => 'userC', 'email' => 'userC@example.com');  $jsonSchema = new JsonSchema(json_encode($type));  $jsonSchema->addTypes($userType);    $jsonSchema->validate('      {         "type":"object",         "properties":{            "users":{               "type":"array",               "items":{                  "$ref":"user"               }            }         }      }');

项目主页:http://www.open-open.com/lib/view/home/1341671831822