php使用json-schema模块实现json校验示例


Posted in PHP onSeptember 28, 2019

本文实例讲述了php使用json-schema模块实现json校验。分享给大家供大家参考,具体如下:

客户端和服务端的http信息传递,采用json几乎成了标配。json格式简单,易于处理,不过由于没有格式规定,无法校验。

好在php有json-schema模块,可以用来验证json是否符合规定的格式。

安装使用composer

composer require justinrainbow/json-schema:~1.3

新建一个schema文件,如:schema.json

{
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string",
             "required": true
    },
    "lastName": {
      "type": "string"
    },
    "age": {
      
      "type": "integer",
      "minimum": 0
    },
    "data":{
       "type":"object",
       "required":true,
       "properties":{
        }
    }
  }
}

可以在字段里嵌套子结构,如果properties为空,则可以任意,比如上例的data。

类型有:

array
A JSON array.
boolean
A JSON boolean.
integer
A JSON number without a fraction or exponent part.
number
Any JSON number. Number includes integer.
null
The JSON null value.
object
A JSON object.
string
A JSON string.

php代码如下:

$json = '{"firstName":"ban", "lastName":"shan","age":1,"data":{"hobby":"coding"} }';
$validator = new JsonSchema\Validator;
$schema = file_get_contents("schema.json");
$validator->check(json_decode($json), json_decode($schema));
if ($validator->isValid()) {
  echo "The supplied JSON validates against the schema.\n";
} else {
  echo "JSON does not validate. Violations:\n";
  foreach ($validator->getErrors() as $error) {
    echo sprintf("[%s] %s\n", $error['property'], $error['message']);
  }
}

这样先定义好通信的schema,在json发送给客户端之前校验是否和约定相同,避免不必要的错误。

参考链接,json-schema 文档,php的json-schema 实现。

完整的代码在此

PS:本站还提供了如下XML与JSON相关工具,方便大家参考使用:

在线XML/JSON互相转换工具:
http://tools.3water.com/code/xmljson

php代码在线格式化美化工具:
http://tools.3water.com/code/phpformat

在线XML格式化/压缩工具:
http://tools.3water.com/code/xmlformat

json代码在线格式化/美化/压缩/编辑/转换工具:
http://tools.3water.com/code/jsoncodeformat

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php4的session功能评述(三)
Oct 09 PHP
据说是雅虎的一份PHP面试题附答案
Jan 07 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
使用PHP破解防盗链图片的一个简单方法
Jun 07 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
Joomla开启SEF的方法
May 04 PHP
thinkPHP自定义类实现方法详解
Nov 30 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
YII框架中使用memcache的方法详解
Aug 02 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
php中文语义分析实现方法示例
Sep 28 #PHP
PHP迭代器和生成器用法实例分析
Sep 28 #PHP
php实现的数组转xml案例分析
Sep 28 #PHP
PHP反射原理与用法深入分析
Sep 28 #PHP
Windows服务器中PHP如何安装redis扩展
Sep 27 #PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
Sep 27 #PHP
thinkPHP+LayUI 流加载实现功能
Sep 27 #PHP
You might like
PHP中显示格式化的用户输入
2006/10/09 PHP
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
js实现简单的验证码
2015/12/25 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
记录一次完整的react hooks实践
2019/03/11 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
python使用epoll实现服务端的方法
2018/10/16 Python
Python2与Python3的区别详解
2020/02/09 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
Django封装交互接口代码
2020/07/12 Python
python实现银行账户系统
2021/02/22 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
市场营销专业个人求职信范文
2013/12/14 职场文书
初中校园之声广播稿
2014/01/15 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
2014年教师节活动总结
2014/08/29 职场文书
读群众路线的心得体会
2014/09/03 职场文书
法人委托书的范本格式
2014/09/11 职场文书
读书笔记怎么写
2015/07/01 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书