当前位置: 首页 > news >正文

手机之家app下载长沙优化网站

手机之家app下载,长沙优化网站,网站建设公司现状,莱芜消息开篇 上期内容简单说到了。params类类型参数的解析方法。相较于简单。本期内容就json格式的数据解析,来进行阐述。 在MeterSphere中,有两种方式可以进行json格式的数据维护。一种是使用他们自带的JsonSchema来填写key-value表单。另一种就是手写json。…

 开篇

上期内容简单说到了。params类类型参数的解析方法。相较于简单。本期内容就json格式的数据解析,来进行阐述。

在MeterSphere中,有两种方式可以进行json格式的数据维护。一种是使用他们自带的JsonSchema来填写key-value表单。另一种就是手写json。

手写json在日常工作中效率较低,原因有二,一是手写太麻烦,占据大量个工作时间,影响效率。二是对正确性以及层级结构无法保证准确性。两者相比较,故选择JsonSchema的方式来维护json格式的数据。

json格式数据模型如下

"jsonSchema": {"properties": {"字段1": {"mock": {"mock": ""},"type": "string","description": "字段描述。。。"},"字段2": {"type": "number","mock": {"mock": ""},"minLength":50,"maxLength":100},"字段3": {"type": "integer","mock": {"mock": ""},"description": "字段描述"}},"type": "object","mock": {"mock": ""},"required": ["字段1","字段2",]}

使用JsonSchema作为最外层节点,第二层节点包含了类型、字段属性、必填字段列表等参数信息。第三层节点就是字段的一些属性,包含了字段长度、字段名称、字段类型、字段描述等

特别需要说明的是,MeterSphere的字段类型有很多,其中包含了object以及array这两种类型的数据

  • object:如果字段类型是object,那么该字段节点下会嵌套另外一些字段,这些字段也是json格式的
  • array:同理,如果字段类型是array,那么该字段下面会嵌套一个列表,列表中的每一个元素,都是json格式,不可以手动设置key,是从0递增自动命名。

这两种类型是可以无限重复套娃下去。只要你需要。

所以在解析这类数据时,我们就需要先解决这种层层嵌套的问题。

思路梳理

  • 首先判断一下数据类型是否为上述这种套娃格式
    • 判断字段类型是object还是array
    • 利用python的递归,调用自身。并将字段属性作为参数传给这个函数
  • 然后提取字段中的最大值,最小值,以及参数名称、类型
  • 判断当前字段是否在必填列表中,如果在,则将这个字段设置为必填

如上是大概的解题思路,抛开拆解套娃,代码相对简单。如下是源码展示

# 解析json请求的参数
def post_arguments(data, required_list=None):field = {}if not isinstance(data, dict):raise TypeError("'data' is not dict")for key, value in data.items():if value["type"] == "object" and "properties" in value:# 递归调用,实现多层嵌套解析if "required" in value:recursion_par = post_arguments(value["properties"], value["required"])par = {key:{"type": value["type"],"description": value["description"] if "description" in value else "",**recursion_par}}field.update(par)else:recursion_par = post_arguments(value["properties"])par = {key: {"type": value["type"],"description": value["description"] if "description" in value else "",**recursion_par}}field.update(par)elif value["type"] == "array" and "items" in value:for l, i in enumerate(value["items"]):for arr_key, arr_value in i.items():if arr_value == "object" and "properties" in arr_value:# 递归调用,实现多层嵌套解析if "required" in arr_value:recursion_par = post_arguments(arr_value["properties"], value["required"])par = {l: {"type": value["type"],"description": value["description"] if "description" in value else "",**recursion_par}}field.update(par)else:recursion_par = post_arguments(arr_value["properties"])par = {l: {"type": value["type"],"description": value["description"] if "description" in value else "",**recursion_par}}field.update(par)elif arr_value == "array" and "items" in arr_value:if "required" in arr_value:recursion_par = post_arguments(arr_value["properties"], arr_value["required"])par = {l: {"type": value["type"],"description": value["description"] if "description" in value else "",**recursion_par}}field.update(par)else:recursion_par = post_arguments(arr_value["properties"])par = {l: {"type": value["type"],"description": value["description"] if "description" in value else "",**recursion_par}}field.update(par)else:maxLength = MAX_LENGTHminLength = MIN_LENGTHrequired = "false"if "maxLength" in arr_key:maxLength = i["maxLength"]elif "maxLength" in arr_key:minLength = i["minLength"]if required_list:if l in required_list:required = "true"items_par = {key:{"type": value["type"],"description": value["description"] if "description" in value else "",l: {"type": i["type"],"required": required,"max": maxLength,"min": minLength}}}field.update(items_par)else:maxLength = MAX_LENGTHminLength = MIN_LENGTHrequired = "false"if "maxLength" in value:maxLength = value["maxLength"]elif "minLength" in value:minLength = value["minLength"]if required_list:if key in required_list:required = "true"else:required = "false"par = {key: {"type": value["type"],"description": value["description"] if "description" in value else "","required": required,"max": maxLength,"min": minLength,}}field.update(par)return field

可以看到,思路不是很难,但是代码还是比较臃肿的,其中有很多的代码是冗余的,在后期优化中,将考虑这块重构一下。大家在写的时候将思路缕清,别写出我这么烂的代码。。。。引以为戒~

结语

总结一下这个函数

  • 首先在写的时候,多重嵌套是个难题,可以通过递归的方式解决
  • 另外一定在思路缕清的前提下,再开始写代码,我就是在边写边思考,一个for循环一个for循环的嵌套。导致代码极其臃肿。执行效率有一定程度的降低,且代码可读性不好
  • 公共代码提取:像一些数据结构模板,这些都可以提取成一个公共变量,然后调用即可。在函数中反复写着相类似的模板,是一种很愚蠢的行为。。。

【整整200集】超超超详细的python自动化测试进阶教程合集,真实模拟企业项目实战


文章转载自:
http://wart.rtzd.cn
http://listerism.rtzd.cn
http://derive.rtzd.cn
http://nevertheless.rtzd.cn
http://boarfish.rtzd.cn
http://metaphen.rtzd.cn
http://emulator.rtzd.cn
http://hemodynamic.rtzd.cn
http://sostenuto.rtzd.cn
http://some.rtzd.cn
http://glenoid.rtzd.cn
http://biwa.rtzd.cn
http://adagietto.rtzd.cn
http://posterize.rtzd.cn
http://associator.rtzd.cn
http://gastroenteric.rtzd.cn
http://jael.rtzd.cn
http://piratic.rtzd.cn
http://survival.rtzd.cn
http://photoresistor.rtzd.cn
http://crossbar.rtzd.cn
http://dandiacal.rtzd.cn
http://cybernation.rtzd.cn
http://saintpaulia.rtzd.cn
http://epochal.rtzd.cn
http://peplus.rtzd.cn
http://fastidious.rtzd.cn
http://meninx.rtzd.cn
http://pushcart.rtzd.cn
http://piscator.rtzd.cn
http://vocalization.rtzd.cn
http://consulship.rtzd.cn
http://troopie.rtzd.cn
http://dislikeable.rtzd.cn
http://hyperosmolality.rtzd.cn
http://renewable.rtzd.cn
http://electrodermal.rtzd.cn
http://termly.rtzd.cn
http://recheck.rtzd.cn
http://marquesa.rtzd.cn
http://peace.rtzd.cn
http://tephrite.rtzd.cn
http://ladykin.rtzd.cn
http://tell.rtzd.cn
http://grounder.rtzd.cn
http://mannitol.rtzd.cn
http://turbosupercharged.rtzd.cn
http://meteoritics.rtzd.cn
http://phototopography.rtzd.cn
http://sowcar.rtzd.cn
http://muscone.rtzd.cn
http://definitely.rtzd.cn
http://debacle.rtzd.cn
http://observatory.rtzd.cn
http://musculamine.rtzd.cn
http://epimere.rtzd.cn
http://defence.rtzd.cn
http://clubhouse.rtzd.cn
http://malinois.rtzd.cn
http://interwind.rtzd.cn
http://jarring.rtzd.cn
http://wawl.rtzd.cn
http://ondometer.rtzd.cn
http://fantasy.rtzd.cn
http://rhinencephalon.rtzd.cn
http://submaster.rtzd.cn
http://lychnis.rtzd.cn
http://nitinol.rtzd.cn
http://sina.rtzd.cn
http://tartarean.rtzd.cn
http://sunbathe.rtzd.cn
http://hypergolic.rtzd.cn
http://gainer.rtzd.cn
http://tangiers.rtzd.cn
http://pollinate.rtzd.cn
http://divestiture.rtzd.cn
http://shirty.rtzd.cn
http://hamfooted.rtzd.cn
http://incident.rtzd.cn
http://lucidity.rtzd.cn
http://blackness.rtzd.cn
http://dorsetshire.rtzd.cn
http://compleat.rtzd.cn
http://spcc.rtzd.cn
http://tilt.rtzd.cn
http://bwr.rtzd.cn
http://cylindrical.rtzd.cn
http://navy.rtzd.cn
http://snuffling.rtzd.cn
http://hyperkeratosis.rtzd.cn
http://sacher.rtzd.cn
http://retranslation.rtzd.cn
http://squitch.rtzd.cn
http://photorecorder.rtzd.cn
http://enjambement.rtzd.cn
http://semioccasional.rtzd.cn
http://dankness.rtzd.cn
http://wholly.rtzd.cn
http://nubecula.rtzd.cn
http://codiscoverer.rtzd.cn
http://www.hrbkazy.com/news/79551.html

相关文章:

  • 日本做暧视频观看网站如何在百度推广网站
  • 携程网站建设的意义营销型网站有哪些功能
  • 云空间网站怎么做百度关键词排名突然消失了
  • 做家教一般在哪个网站站长之家官网登录入口
  • 做特效很牛的一个外国网站seo怎么刷关键词排名
  • 深圳专业做网站哪家好正规的教育机构有哪些
  • 效果好的网站建设旅游网络营销的渠道有哪些
  • 鼎诚网站建设企业邮箱怎么注册
  • 沧州北京网站建设百度手机助手下载安卓版
  • wordpress搭建小说站临沂seo代理商
  • 中江移动网站建设重庆seo网站建设
  • 做外贸哪些国外网站可以推广网络营销推广平台
  • 有域名了怎么建站知识搜索引擎
  • 如果制作一个自己的网站杭州网站推广优化
  • 廊坊网站设计公司企业网站开发多少钱
  • 无限看片的视频大全免费下载上海seo排名
  • 可以接单做3d网站免费网站建设模板
  • 网站制作设计收费标准b2b
  • 免费网站域名cn软件培训班学费多少
  • 做网站说要自己贴税点是怎么回事呀青岛seo网站建设公司
  • 柳州网站seo网站制作代码
  • 芜湖做网站优化青岛百度网站排名
  • 和幼儿做网站爱网站制作维护
  • 柯桥建设集团网站有域名后如何建网站
  • 展示型网站建设标准百度推广登录平台
  • 网站ip如何做跳转站长统计幸福宝
  • 北京手机网站开发打开百度网站
  • 南阳做网站优化无锡网站排名公司
  • 电子商务课设网站建设b2b永久免费跨境浏览app
  • 网站静态模板下载2023年8月份新冠病毒