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 相关文章推荐
Banner程序
Oct 09 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
PHP两种快速排序算法实例
Feb 15 PHP
php输出指定时间以前时间格式的方法
Mar 21 PHP
php使用crypt()函数进行加密
Jun 08 PHP
通过PHP实现获取访问用户IP
May 09 PHP
PHP如何解决微信文章图片防盗链
Dec 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 变量类型的强制转换
2009/10/23 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
Python中的延迟绑定原理详解
2019/10/11 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
人民教师求职自荐信
2014/03/12 职场文书
入股协议书范本
2014/04/14 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书