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面向对象全攻略 (五) 封装性
Sep 30 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
PHP 开发环境配置(测试开发环境)
Apr 28 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 PHP
php使用PDO方法详解
Dec 27 PHP
PHP中imagick函数的中文解释
Jan 21 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
May 05 PHP
php实现留言板功能(会话控制)
May 23 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
php 如何获取数组第一个值
2013/08/06 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
Add a Table to a Word Document
2007/06/15 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中的文件和目录操作实现代码
2011/03/13 Python
寻找网站后台地址的python脚本
2014/09/01 Python
python实现redis三种cas事务操作
2017/12/19 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
农业项目建议书
2014/08/25 职场文书
班主任经验交流材料
2014/12/16 职场文书
会计工作态度自我评价
2015/03/06 职场文书