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 email邮箱正则
Oct 08 PHP
PHP数组实例总结与说明
Aug 23 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
PHP中加密解密函数与DES加密解密实例
Oct 17 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 PHP
PHP7 其他修改
Mar 09 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 !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
JSON格式化输出
2014/11/10 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
如何将python中的List转化成dictionary
2016/08/15 Python
python算法表示概念扫盲教程
2017/04/13 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
详解python itertools功能
2020/02/07 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
Python连接Impala实现步骤解析
2020/08/04 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
网站编辑求职信
2013/10/17 职场文书
房地产出纳岗位职责
2013/12/01 职场文书
简单租房协议书
2014/10/21 职场文书
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技