父子节点内容和个数提取

有时我们需要获得菜单的内容和个数,这个时候通常有父子菜单,那么怎么分别获取到他们呢?以下面的智慧物业管理系统为例,有7个父节点,每个父节点下面有子节点。如何把父节点名称和总数,以及子节点的名称和总数提取出来呢?

1、抓取返回值

首先我们应该先抓取返回值

可以放notepad++里面,

也可以放pycharm里面查看

2、常量获取对应的父子节点的名称和父子节点的总数试验V1

 1、首先提取getrouters接口的返回内容

import requests# 定义接口地址
url='https://svr-6-9009.share.51env.net/prod-api/getRouters'# 定义token参数
token="eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImM2YjI1OGMzLTRlZDQtNGM5OS05YWYwLTgyOTc1ZDY0MzcxZiJ9.FRX40yX-9hdENLARAn5N_n9JtlGsKQRbTNmKsJBu0GX70RRVUR2pvAjBeFSv61lHy-tzJdLj5P3HPsdtsjw3yg"
header={'Authorization':'Bearer '+token}
# 发送请求并获取
response=requests.get(url,headers=header).json()
print(response)

输出结果:

{'msg': '操作成功', 'code': 200, 'data': [{'name': 'Payment', 'path': '/payment', 'hidden': False, 'redirect': 'noRedirect', 'component': 'Layout', 'alwaysShow': True, 'meta': {'title': '物业收费', 'icon': 'shopping', 'noCache': False, 'link': None}, 'children': [{'name': 'Housepay', 'path': 'housepay', 'hidden': False, 'component': 'pms/housepay', 'meta': {'title': '商铺综合收费', 'icon': 'money', 'noCache': False, 'link': None}}, {'name': 'Temppay', 'path': 'temppay', 'hidden': False, 'component': 'pms/paymenttemp', 'meta': {'title': '临时收费', 'icon': 'form', 'noCache': False, 'link': None}}, {'name': 'Deposit', 'path': 'deposit', 'hidden': False, 'component': 'pms/paymentdeposit', 'meta': {'title': '押金管理', 'icon': 'dict', 'noCache': False, 'link': None}}, {'name': 'Pre', 'path': 'pre', 'hidden': False, 'component': 'pms/paymentpre', 'meta': {'title': '预存款管理', 'icon': 'documentation', 'noCache': False, 'link': None}}]}, {'name': 'Fee', 'path': '/fee', 'hidden': False, 'redirect': 'noRedirect', 'component': 'Layout', 'alwaysShow': True, 'meta': {'title': '收费数据管理', 'icon': 'build', 'noCache': False, 'link': None}, 'children': [{'name': 'Meter', 'path': 'meter', 'hidden': False, 'component': 'pms/paymentmeter', 'meta': {'title': '抄表数据管理', 'icon': 'time-range', 'noCache': False, 'link': None}}, {'name': 'Bill', 'path': 'bill', 'hidden': False, 'component': 'pms/paymentbill', 'meta': {'title': '商铺收费数据', 'icon': 'edit', 'noCache': False, 'link': None}}]}, {'name': 'Config', 'path': '/config', 'hidden': False, 'redirect': 'noRedirect', 'component': 'Layout', 'alwaysShow': True, 'meta': {'title': '基础数据管理', 'icon': 'cascader', 'noCache': False, 'link': None}, 'children': [{'name': 'Configfeeitem', 'path': 'configfeeitem', 'hidden': False, 'component': 'pms/configfeeitem', 'meta': {'title': '收费项管理', 'icon': 'list', 'noCache': False, 'link': None}}, {'name': 'Pms/confighouseblock', 'path': 'pms/confighouseblock', 'hidden': False, 'component': 'pms/confighouseblock', 'meta': {'title': '商业区管理', 'icon': 'example', 'noCache': False, 'link': None}}, {'name': 'Config/house', 'path': 'config/house', 'hidden': False, 'component': 'pms/confighouse', 'meta': {'title': '商铺管理', 'icon': 'component', 'noCache': False, 'link': None}}, {'name': 'Config/contract', 'path': 'config/contract', 'hidden': False, 'component': 'pms/confighousecontract', 'meta': {'title': '商铺租售', 'icon': 'switch', 'noCache': False, 'link': None}}]}, {'name': 'Statistics', 'path': '/statistics', 'hidden': False, 'redirect': 'noRedirect', 'component': 'Layout', 'alwaysShow': True, 'meta': {'title': '统计报表', 'icon': 'monitor', 'noCache': False, 'link': None}, 'children': [{'name': 'DailyReport', 'path': 'dailyReport', 'hidden': False, 'component': 'statistics/daily', 'meta': {'title': '收费日报表', 'icon': 'job', 'noCache': False, 'link': None}}, {'name': 'DailyFee', 'path': 'dailyFee', 'hidden': False, 'component': 'statistics/dailyFee', 'meta': {'title': '收费项汇总表', 'icon': 'excel', 'noCache': False, 'link': None}}, {'name': 'PayLog', 'path': 'payLog', 'hidden': False, 'component': 'statistics/paylog', 'meta': {'title': '收费明细表', 'icon': 'date-range', 'noCache': False, 'link': None}}, {'name': 'NextFee', 'path': 'nextFee', 'hidden': False, 'component': 'statistics/nextFee', 'meta': {'title': '待生成的费用', 'icon': 'skill', 'noCache': False, 'link': None}}, {'name': 'PreAccount', 'path': 'preAccount', 'hidden': False, 'component': 'statistics/preAccount', 'meta': {'title': '预收款余额', 'icon': 'druid', 'noCache': False, 'link': None}}, {'name': 'Fee', 'path': 'fee', 'hidden': False, 'component': 'statistics/payment', 'meta': {'title': '收费统计', 'icon': 'chart', 'noCache': False, 'link': None}}, {'name': 'UserFee', 'path': 'userFee', 'hidden': False, 'component': 'statistics/payment/house', 'meta': {'title': '收费统计(商铺)', 'icon': 'chart', 'noCache': False, 'link': None}}, {'name': 'Overdue', 'path': 'overdue', 'hidden': False, 'component': 'statistics/overdue', 'meta': {'title': '欠费数据', 'icon': 'server', 'noCache': False, 'link': None}}]}, {'name': 'System', 'path': '/system', 'hidden': False, 'redirect': 'noRedirect', 'component': 'Layout', 'alwaysShow': True, 'meta': {'title': '系统管理', 'icon': 'system', 'noCache': False, 'link': None}, 'children': [{'name': 'User', 'path': 'user', 'hidden': False, 'component': 'system/user/index', 'meta': {'title': '用户管理', 'icon': 'user', 'noCache': False, 'link': None}}, {'name': 'Role', 'path': 'role', 'hidden': False, 'component': 'system/role/index', 'meta': {'title': '角色管理', 'icon': 'peoples', 'noCache': False, 'link': None}}, {'name': 'Menu', 'path': 'menu', 'hidden': False, 'component': 'system/menu/index', 'meta': {'title': '菜单管理', 'icon': 'tree-table', 'noCache': False, 'link': None}}, {'name': 'Dept', 'path': 'dept', 'hidden': False, 'component': 'system/dept/index', 'meta': {'title': '部门管理', 'icon': 'tree', 'noCache': False, 'link': None}}, {'name': 'Post', 'path': 'post', 'hidden': False, 'component': 'system/post/index', 'meta': {'title': '岗位管理', 'icon': 'post', 'noCache': False, 'link': None}}, {'name': 'Dict', 'path': 'dict', 'hidden': False, 'component': 'system/dict/index', 'meta': {'title': '字典管理', 'icon': 'dict', 'noCache': False, 'link': None}}, {'name': 'Config', 'path': 'config', 'hidden': False, 'component': 'system/config/index', 'meta': {'title': '参数设置', 'icon': 'edit', 'noCache': False, 'link': None}}, {'name': 'Notice', 'path': 'notice', 'hidden': False, 'component': 'system/notice/index', 'meta': {'title': '通知公告', 'icon': 'message', 'noCache': False, 'link': None}}, {'name': 'Log', 'path': 'log', 'hidden': False, 'redirect': 'noRedirect', 'component': 'ParentView', 'alwaysShow': True, 'meta': {'title': '日志管理', 'icon': 'log', 'noCache': False, 'link': None}, 'children': [{'name': 'Operlog', 'path': 'operlog', 'hidden': False, 'component': 'monitor/operlog/index', 'meta': {'title': '操作日志', 'icon': 'form', 'noCache': False, 'link': None}}, {'name': 'Logininfor', 'path': 'logininfor', 'hidden': False, 'component': 'monitor/logininfor/index', 'meta': {'title': '登录日志', 'icon': 'logininfor', 'noCache': False, 'link': None}}]}]}, {'name': 'Monitor', 'path': '/monitor', 'hidden': False, 'redirect': 'noRedirect', 'component': 'Layout', 'alwaysShow': True, 'meta': {'title': '系统监控', 'icon': 'monitor', 'noCache': False, 'link': None}, 'children': [{'name': 'Online', 'path': 'online', 'hidden': False, 'component': 'monitor/online/index', 'meta': {'title': '在线用户', 'icon': 'online', 'noCache': False, 'link': None}}, {'name': 'Job', 'path': 'job', 'hidden': False, 'component': 'monitor/job/index', 'meta': {'title': '定时任务', 'icon': 'job', 'noCache': False, 'link': None}}, {'name': 'Druid', 'path': 'druid', 'hidden': False, 'component': 'monitor/druid/index', 'meta': {'title': '数据监控', 'icon': 'druid', 'noCache': False, 'link': None}}, {'name': 'Server', 'path': 'server', 'hidden': False, 'component': 'monitor/server/index', 'meta': {'title': '服务监控', 'icon': 'server', 'noCache': False, 'link': None}}, {'name': 'Cache', 'path': 'cache', 'hidden': False, 'component': 'monitor/cache/index', 'meta': {'title': '缓存监控', 'icon': 'redis', 'noCache': False, 'link': None}}]}, {'name': 'Tool', 'path': '/tool', 'hidden': False, 'redirect': 'noRedirect', 'component': 'Layout', 'alwaysShow': True, 'meta': {'title': '系统工具', 'icon': 'tool', 'noCache': False, 'link': None}, 'children': [{'name': 'Build', 'path': 'build', 'hidden': False, 'component': 'tool/build/index', 'meta': {'title': '表单构建', 'icon': 'build', 'noCache': False, 'link': None}}, {'name': 'Gen', 'path': 'gen', 'hidden': False, 'component': 'tool/gen/index', 'meta': {'title': '代码生成', 'icon': 'code', 'noCache': False, 'link': None}}, {'name': 'Swagger', 'path': 'swagger', 'hidden': False, 'component': 'tool/swagger/index', 'meta': {'title': '系统接口', 'icon': 'swagger', 'noCache': False, 'link': None}}]}]}
# 提取父节点的名称
# 提取父节点的名称
parentmenu=response['data'][0]['meta']['title']
print(parentmenu)

输出结果:

物业收费
# 提取子节点的名称
# 提取子节点的名称
childmenu=response['data'][0]['children'][0]['meta']['title']
print(childmenu)

输出结果:

商铺综合收费
#子节点总个数问题
#子节点总个数问题
childmenu=response['data'][2]['children']
childcount=len(childmenu)
print(childcount)

输出结果:

4

3、for循环获取对应的父子节点的名称和父子节点的总数试验V2

首先获取父节点的名字:

# 获取父节点的名称
for i in range(0,7):parentmenu=response['data'][i]['meta']['title']print(parentmenu)

可以看到,返回值data下的列表第一个字典的meta下面,对应title就是我们要取到的父节点的名字。

输出结果:

物业收费
收费数据管理
基础数据管理
统计报表
系统管理
系统监控
系统工具

接着提取子节点的名称,

# 获取子节点的名称
for j in range(0,3):childmenu=response['data'][0]['children'][j]['meta']['title']print(childmenu)

输出结果:

商铺综合收费
临时收费
押金管理

获取所有子节点的个数:

#获取所有子节点的个数
for k in range(0,7):childmenu=response['data'][k]['children']childcount=len(childmenu)print(childcount)

输出结果:

4
2
4
8
9
5
3

此时可以用try ,except改进获取所有子节点的名称

# 获取所有子节点的名称
for m in range(0,7):print(m + 1)for j in range(0,9):try:childmenu=response['data'][m]['children'][j]['meta']['title']except:breakelse:print(childmenu)

这里m+1是用来展示序号的。

1
商铺综合收费
临时收费
押金管理
预存款管理
2
抄表数据管理
商铺收费数据
3
收费项管理
商业区管理
商铺管理
商铺租售
4
收费日报表
收费项汇总表
收费明细表
待生成的费用
预收款余额
收费统计
收费统计(商铺)
欠费数据
5
用户管理
角色管理
菜单管理
部门管理
岗位管理
字典管理
参数设置
通知公告
日志管理
6
在线用户
定时任务
数据监控
服务监控
缓存监控
7
表单构建
代码生成
系统接口

4、列表获取对应的父子节点的名称和父子节点的总数试验V3

1、提取父子节点的内容存入list中
parentList=[]
for i in range(0,7):parentmenu=response['data'][i]['meta']['title']print(parentmenu)parentList.append(parentmenu)parentnum=len(parentList)
print(parentnum)

其中parentmenu中存放的是父节点的列表,parentnum打印的是父节点的个数。

输出结果:

物业收费
收费数据管理
基础数据管理
统计报表
系统管理
系统监控
系统工具
7
2、提取子节点的内容存入list中
childList=[]
for m in range(0,7):print(m+1)childtmp = []for j in range(0,9):try:childmenu=response['data'][m]['children'][j]['meta']['title']except:breakelse:print(childmenu)childtmp.append(childmenu)print(childtmp)childList.append(childtmp)
print(childList)

这里注意,

print(m+1)   #打印父节点的顺序
print(childtmp)   #打印子节点的临时列表
print(childList)  #最后将整个列表内容输出
1
商铺综合收费
临时收费
押金管理
预存款管理
['商铺综合收费', '临时收费', '押金管理', '预存款管理']
2
抄表数据管理
商铺收费数据
['抄表数据管理', '商铺收费数据']
3
收费项管理
商业区管理
商铺管理
商铺租售
['收费项管理', '商业区管理', '商铺管理', '商铺租售']
4
收费日报表
收费项汇总表
收费明细表
待生成的费用
预收款余额
收费统计
收费统计(商铺)
欠费数据
['收费日报表', '收费项汇总表', '收费明细表', '待生成的费用', '预收款余额', '收费统计', '收费统计(商铺)', '欠费数据']
5
用户管理
角色管理
菜单管理
部门管理
岗位管理
字典管理
参数设置
通知公告
日志管理
['用户管理', '角色管理', '菜单管理', '部门管理', '岗位管理', '字典管理', '参数设置', '通知公告', '日志管理']
6
在线用户
定时任务
数据监控
服务监控
缓存监控
['在线用户', '定时任务', '数据监控', '服务监控', '缓存监控']
7
表单构建
代码生成
系统接口
['表单构建', '代码生成', '系统接口']
[['商铺综合收费', '临时收费', '押金管理', '预存款管理'], ['抄表数据管理', '商铺收费数据'], ['收费项管理', '商业区管理', '商铺管理', '商铺租售'], ['收费日报表', '收费项汇总表', '收费明细表', '待生成的费用', '预收款余额', '收费统计', '收费统计(商铺)', '欠费数据'], ['用户管理', '角色管理', '菜单管理', '部门管理', '岗位管理', '字典管理', '参数设置', '通知公告', '日志管理'], ['在线用户', '定时任务', '数据监控', '服务监控', '缓存监控'], ['表单构建', '代码生成', '系统接口']]Process finished with exit code 0

愿每个测试都能顺利转为测试开发,提高职业技能,成为前1%的存在,为社会创造更大的价值,为公司节约更多的成本,为自己和家庭谋求更高的收入,所有人不受职业年龄限制,越老越吃香,直至财富自由;愿测试技术越来越进步,软件质量进一步得到提高,效率提高。愿祖国更加美好,人民更加幸福。多喜乐,常安宁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拆分盘投资策略解析:机制、案例与风险考量

一、引言 随着互联网技术的迅猛发展和金融市场的不断创新,拆分盘这一投资模式逐渐崭露头角,成为投资者关注的焦点。它基于特定的拆分策略,通过调整投资者持有的份额和单价,实现了看似稳健的资产增长。本文旨在深入探讨拆分盘的运…

鸿蒙开发设备管理:【@ohos.multimodalInput.inputEvent (输入事件)】

输入事件 InputEvent模块描述了设备上报的基本事件。 说明: 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import InputEvent from ohos.multimodalInput.inputEvent;InputEvent 系统能力…

WPS图片无法居中、居中按钮无法点击(是灰色的)

在PPT中复制对象到WPS word中后,导致图片一直靠左,而无法居中 直接选中图片是错误的: 这时你会发现居中按钮无法点击(是灰色的) 正确的是选中图片的前面的部分,然后点击居中,或者Ctrl E

昇思25天学习打卡营第10天|FCN图像语义分割

一、简介: 本篇博客是昇思大模型打卡营应用实践部分的第一次分享,主题是计算机视觉(CV)领域的FCN图像语义分割,接下来几天还会陆续分享其他CV领域的知识(doge)。 全卷积网络(Fully…

基于Java实现图像浏览器的设计与实现

图像浏览器的设计与实现 前言一、需求分析选题意义应用意义功能需求关键技术系统用例图设计JPG系统用例图图片查看系统用例图 二、概要设计JPG.javaPicture.java 三、详细设计类图JPG.java UML类图picture.java UML类图 界面设计JPG.javapicture.java 四、源代码JPG.javapictur…

深入理解pytest fixture:提升测试的灵活性和可维护性!

在现代软件开发中,测试是保证代码质量的重要环节。pytest作为一个强大的测试框架,以其灵活的fixture系统脱颖而出。本文将详细介绍pytest中的fixture概念,通过具体案例展示其应用,并说明如何利用fixture提高测试的灵活性和可维护性…

EKF+UKF+CKF+PF的效果对比|三维非线性滤波|MATLAB例程

前言 标题里的EKF、UKF、CKF、PF分别为:扩展卡尔曼滤波、无迹卡尔曼滤波、容积卡尔曼滤波、粒子滤波。 EKF是扩展卡尔曼滤波,计算快,最常用于非线性状态方程或观测方程下的卡尔曼滤波。 但是EKF应对强非线性的系统时,估计效果不如…

头文件没有string.h ----- 怎么统计字符串的长度?

字符串的逆序&#xff08;看收藏里面的题&#xff09; 第一种方式&#xff1a; #include <stdio.h> void f(char *p);int main() {char s[1000];gets(s);f(s);printf("%s",s);return 0; }void f(char *p) {int i0;int q,k0;while(p[i]!\0){i;}while(k<i){…

SaaS增长:小型SaaS企业可以使用推荐奖励计划吗

在SaaS&#xff08;软件即服务&#xff09;行业的激烈竞争中&#xff0c;如何快速有效地增长用户数量是每个企业都面临的挑战。对于小型SaaS企业来说&#xff0c;资源有限&#xff0c;如何最大化利用现有资源实现用户增长成为了一个重要议题。在这样的背景下&#xff0c;推荐奖…

git clone中的报错问题解决:git@github.com: Permission denied (publickey)

报错&#xff1a; Submodule path ‘kernels/3rdparty/llm-awq’: checked out ‘19a5a2c9db47f69a2851c83fea90f81ed49269ab’ Submodule path ‘kernels/3rdparty/nvbench’: checked out ‘75212298727e8f6e1df9215f2fcb47c8c721ffc9’ Submodule path ‘kernels/3rdparty/t…

自动点赞,自动评论,自动刷

最近周六日家里没事干了个自动程序。需要的找我&#xff01; 仅供学习&#xff01;&#xff01;&#xff01;&#xff01;目前实现的功能 1.自动打开痘印&#xff0c;头条等多个app 2.自动点赞&#xff0c;自动评论 3.自动养号 4.自动关注 后期逐步实现: 1.继续内容的自动…

阿里云:云通信号码认证服务,node.js+uniapp(vue),完整代码

api文档&#xff1a;云通信号码认证服务_云产品主页-阿里云OpenAPI开发者门户 (aliyun.com) reg.vue <template> <div> <input class"sl-input" v-model"phone" type"number" maxlength"11" placeholder"手机号…

TopK问题与如何在有限内存找出前几最大(小)项(纯c语言版)

目录 0.前言 1.知识准备 2.实现 1.首先是必要的HeapSort 2.造数据 其他注意事项 3.TopK的实现 0.前言 在我们的日常生活中总有排名系统&#xff0c;找出前第k个分数最高的人&#xff0c;而现在让我们用堆来在有限内存中进行实现 1.知识准备 想要实现topk问题首先我们要…

Linux运维:mysql高级查询语句(2)

目 录 一、创建数据库&#xff1a; 二、创建表结构&#xff1a;DDL 2.1 学生表s&#xff1a; 2.2 成绩表sc&#xff1a; 2.3 课程表c&#xff1a; 三、录入数据&#xff1a;DML 3.1 对学生表s的数据录入&#xff1a; 3.2 对成绩表sc的数据录入&#xff1a; 3.3 对课…

【Kaggle】Telco Customer Churn 电信用户流失预测案例

⭐️前言&#xff1a;案例学习说明与案例建模流程 我们将围绕Kaggle中的电信用户流失数据集&#xff08;Telco Customer Churn&#xff09;进行用户流失预测。在此过程中&#xff0c;将综合应用此前所介绍的各种方法与技巧&#xff0c;并在实践中提炼总结更多实用技巧。 ⭐️对…

期权交易指南:为什么要交易场外个股期权?

今天带你了解期权交易指南&#xff1a;为什么要交易场外个股期权&#xff1f;随着金融市场的发展和创新&#xff0c;投资者寻求更多的工具来管理风险和获得更高的回报。场外期权交易应运而生&#xff0c;成为一种重要的金融衍生品交易方式。 简单来说就是期权是一种合约&#…

Mysql 的账户管理,索引,存储引擎

目录 一.MySQL的账户管理 1.存放用户信息的表 2.查看当前使用的用户 3.新建用户 4.修改用户名称 5.删除用户 6.修改用户密码 7.破解密码 8. 远程登录 9.用户权限管理 9.1 权限类别 9.2 查看权限 9.3 授予权限 9.4 撤销权限 二.索引 1. 索引管理 1.1 查看索…

麒麟v10-sp3安装kkfileview

1、上传包到服务器 执行&#xff1a;/bin/startup.sh 会自动安装LibreOffice&#xff0c;因为/bin/install.sh判断了不是redhat-release就是ubuntu&#xff0c;导致麒麟系统会走ubuntu&#xff0c;所以会失败&#xff0c;这里改一下如果是麒麟也走install_redhat就可以了 也…

服务器日志事件ID4107:从自动更新 cab 中提取第三方的根目录列表失败,错误为: 已处理证书链,但是在不受信任提供程序信任的根证书中终止。

在查看Windows系统日志时&#xff0c;你是否有遇到过事件ID4107错误&#xff0c;来源CAPI2&#xff0c;详细信息在 http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab 从自动更新 cab 中提取第三方的根目录列表失败&#xff0c;…