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 和 XML: 使用expat函数(二)
Oct 09 PHP
关于PHP结束标签的使用细节探讨及联想
Mar 04 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 PHP
纯php生成随机密码
Oct 30 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
详解js异步文件加载器
Jan 24 PHP
PHP获取用户客户端真实IP的解决方案
Oct 10 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 PHP
thinkphp分页集成实例
Jul 24 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 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脚本的10个技巧(6)
2006/10/09 PHP
默默简单的写了一个模板引擎
2007/01/02 PHP
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
JS实现自定义弹窗功能
2018/08/08 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
Python中的高级函数map/reduce使用实例
2015/04/13 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
使用python实现tcp自动重连
2017/07/02 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
销售文员的岗位职责
2013/11/20 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
课外科技活动总结
2014/08/27 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
Java 数据结构七大排序使用分析
2022/04/02 Java/Android