python中json格式检查_利用 JSON-Schema 对 Json 数据进行校验( Python 示例)

本文尝试通过json数据校验方法解决如下几个问题:

数据没有校验,系统处于裸奔状态,导致后期维护成本高;

编写一堆校验代码,混杂在业务代码中,导致代码可读性降低;

API交付的时候提供一大段接口描述文档,但用户还是要揣测文档意思。

1. 背景介绍

1.1 无处不在的JSON

JSON是一种轻量级的数据交换格式,基于Javascript的一个子集, 但采用完全独立于语言的文本格式,易于人阅读和编写,同时也易于机器解析和生成。这些特性使JSON成为理想的数据交换语言, 几乎所有与网页开发相关的语言都有JSON库。目前蓝鲸ESB,甚至公司内绝大多数系统的交互都采用JSON格式。

1.2 令人头疼的数据校验

由于JSON比较灵活,没有固定的schema,使用JSON作为数据交换格式时,我们经常遇到数据校验的问题。一个简单的JSON数据往往需要写一大段代码来校验数据格式是否符合预期,导致代码膨胀,可读性不好。

如下是一段CC系统新增自定义变量的请求参数,大致分成几部分请求账户、操作者、添加到的目标业务和环境类型,最后是要添加的变量列表。

{

"systemId": "", # 系统账号

"password": "", # 系统密码

"operator": "hoffer", # 操作者

"ticket": "", # 操作者的ticket信息

"ApplicationID": 295, # 业务ID

"EnviType": 1, # 环境类型

"Params": [{

"Scope": "[0-1000].gameserver.*.*", # 变量作用域

"KeyName": "domain", # 变量名称

"ValName": "awx.zhunter.com" # 变量值

},

{

"Scope": "[1001-2000].gameserver.*.*", # 变量作用域

"KeyName": "domain", # 变量名称

"ValName": "awx.zhunter.com" # 变量值

}]

}

为了校验参数的正确性,往往的做法是写如下一段代码(用kwargs表示请求参数)

# 参数数据类型校验

if not isinstance(kwargs, dict):

return False, "kwargs must be dict"

# 校验systemId是否在参数字段中

if "systemId" not in kwargs:

return False, "systemId is required"

# 校验systemId值的类型

if not instance(kwargs["systemId"], basestring):

return False, "systemId must be string"

# 校验systemId值是否为空

if not kwargs["systemId"]:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值