json-schema-php:JSON 結構驗證 PHP 實現

jopen 12年前發布 | 34K 次閱讀 JSON JSON開發包

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.baiduhome.net/lib/view/home/1341671831822

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!