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 相关文章推荐
PHP下10件你也许并不了解的事情
Sep 11 PHP
php 高性能书写
Dec 11 PHP
php采用curl实现伪造IP来源的方法
Nov 21 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
PHP中header函数的用法及其注意事项详解
Jun 13 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
Laravel 自带的Auth验证登录方法
Sep 30 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
PHP函数超时处理方法
2016/02/14 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
JAVASCRIPT HashTable
2007/01/22 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
判断及设置浏览器全屏模式
2014/04/20 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
python判断windows系统是32位还是64位的方法
2015/05/11 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
Numpy中的mask的使用
2018/07/21 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
活动策划邀请函
2014/02/06 职场文书
离婚协议书怎么写
2014/09/12 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书