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安装问题
Oct 09 PHP
用PHP开发GUI
Oct 09 PHP
将数字格式的计算结果转为汉字格式
Oct 09 PHP
用php将任何格式视频转为flv的代码
Sep 03 PHP
一道求$b相对于$a的相对路径的php代码
Aug 08 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
Oct 31 PHP
php使用strtotime和date函数判断日期是否有效代码分享
Dec 25 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
详解PHP中的mb_detect_encoding函数使用方法
Aug 18 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
Oct 09 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 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遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
php获取根域名方法汇总
2014/10/28 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python解析xml文件操作实例
2014/10/05 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
python selenium循环登陆网站的实现
2019/11/04 Python
Python识别处理照片中的条形码
2020/11/16 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
培训主管的岗位职责
2013/11/23 职场文书
大学军训感言
2014/01/10 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
公司停电通知
2015/04/15 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python
Django框架中模型的用法
2022/06/10 Python