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 相关文章推荐
Win2003服务器安全加固设置--进一步提高服务器安全性
May 23 PHP
PHP 解决utf-8和gb2312编码转换问题
Mar 18 PHP
简单的php写入数据库类代码分享
Jul 26 PHP
php一行代码获取文件后缀名实例分析
Nov 12 PHP
CodeIgniter控制器之业务逻辑实例分析
Jan 20 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
thinkphp项目如何自定义微信分享描述内容
Feb 20 PHP
laravel中命名路由的使用方法
Feb 24 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
用php如何解决大文件分片上传问题
Jul 07 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常用代码
2006/11/23 PHP
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
详解NODEJS的http实现
2018/01/04 NodeJs
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
Python实现Event回调机制的方法
2019/02/13 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
pandas实现导出数据的四种方式
2020/12/13 Python
如何编写python的daemon程序
2021/01/07 Python
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
Linux如何为某个操作添加别名
2013/03/01 面试题
幼儿园教师备课制度
2014/01/12 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
html5表单的required属性使用
2021/07/07 HTML / CSS
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server