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 文件状态缓存带来的问题
Dec 14 PHP
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
thinkphp使用phpmailer发送邮件的方法
Nov 24 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
浅谈php中变量的数据类型判断函数
Mar 04 PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 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
模拟flock实现文件锁定
2007/02/14 PHP
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
JS trim去空格的最佳实践
2011/10/30 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
浅谈编码,解码,乱码的问题
2016/12/30 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
pycharm修改file type方式
2019/11/19 Python
Python 实现数组相减示例
2019/12/27 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
意大利网上药房:Farmacia 33
2020/01/27 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
国外软件测试工程师面试题
2016/12/09 面试题
美术兴趣小组活动总结
2014/07/07 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技