Python 响应报文提取方式

简介

响应报文分为JSON格式和字符串格式,往往响应报文中有很多个字段和多层嵌套,如何快速的提取字段key和对应的value值呢?有三种提取方式:jsonpath提取、正则表达式、字符串切片。jsonpath是针对JSON格式的数据提取,后两种主要针对字符串形式的数据提取。

jsonpath

JsonPath是一种用于在JSON数据中定位和提取特定数据的表达式语言。它类似于XPath用于XML的定位和提取,可以帮助我们灵活地从复杂的JSON结构中获取所需的数据。

jsonpath的安装

Terminal终端输入命令行:

pip install jsonpath

也可以使用国内镜像源

pip install jsonpath -i 镜像源地址

以下是国内的几个镜像源地址:
豆瓣:https://pypi.doubanio.com/simple/
阿里云:https://mirrors.aliyun.com/pupi/simple/
华中理工:https://pypi.hustunique.com/simple/
山东理工:https://pypi.sdulinux.org/simple/
中科大:https://pypi.mirrors.ustc.edu.cn/simple/
清华:https://pypi.tuna.tsinghua.edu.cn/simple/

jsonpath的特点

  • jsonpath可处理的报文数据类型是字典类型
  • 通过jsonpath获取的内容,会以list的形式返回,也就相当于结果以一个值或多个值存在,需要通过list[index]/list[start:end]进一步提取想要的内容。
  • 基于jsonpath处理的json数据,需要同时同步list的数据
  • jsonpath如果表达式输入错误,则会返回False,故jsonpath的处理结果要么是list 要么是False

jsonpath的基本范式

  1. 基本语法:
表达式注释
$根节点,也是所有jsonpath表达式的起点
·当前节点
··递归下级节点
  1. 属性操作
表达式注释
$.property选择指定属性
$[‘property’]选择指定属性,属性名中带有特殊字符时使用,也可用于平常为了避免出现特殊字符时使用
  1. 数组操作
表达式注释
$.arrayName[index]选择指定节点下索引处的元素
$.arrayName[start:end]选择指定节点下索引范围内的元素
  1. 过滤器
表达式注释
$.arrayName[?(@.property == value)]根据条件过滤数组元素,这个可以作为找到某个标志性属性后查找同级其他属性
$.arrayName[?(@.property > value)]同上
  1. 路径组合
表达式注释
$.parent.child选择父节点下的子节点属性
$.parent[*].child选择父节点下所有子节点的某个属性

jsonpath的应用

jsonpath(json_data, “表达式”)

# -*- coding:utf-8 -*-
# @File:test_jsonpath_01.py
# @Date:2025/5/21 22:38
# @Author:wayne
# @description:jsonpath的基础用法import jsonpathdata = {"name": "Alice","age": 25,"email": "alice@example.com","address": {"street": "456 Elm Street","city": "Los Angeles","country": "USA"},"hobbies": ["reading", "traveling", "cooking"],"education": [{"degree": "Bachelor's","major": "Software Engineering","university": "ABC University","year": 2018},{"degree": "Master's","major": "Computer Science","university": "BCD University","year": 2019},{"degree": "Doctor's","major": "Business Administration","university": "XYZ University","year": 2020}],"projects": [{"name": "Project A","description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.","contributors": ["John", "Sarah", "Mike"],"completed": "true"},{"name": "Project B","description": "Nulla vel sagittis elit. Vivamus auctor massa in lacinia pellentesque.","contributors": ["Alice", "David"],"completed": "false"}],"is-active": "true"
}result = jsonpath.jsonpath(data, '$.name')[0]
print("选择指定属性:", result)
result = jsonpath.jsonpath(data, '$.[is-active]')[0]
print("选择指定属性-特殊符号:", result)result = jsonpath.jsonpath(data, '$.education[1]')
print("数组操作-选择指定节点下索引处的元素:", result)
result = jsonpath.jsonpath(data, '$.education[1:]')
print("数组操作-选择指定节点下索引范围内的元素:", result)result = jsonpath.jsonpath(data, '$.education[?(@.year == 2020)]')
print("过滤器1:", result)
result = jsonpath.jsonpath(data, '$.education[?(@.year > 2018)]')
print("过滤器2:", result)result = jsonpath.jsonpath(data, '$.address.city')[0]
print("路径组合-选择父节点下的子节点:", result)
result = jsonpath.jsonpath(data, '$.education[0].year')[0]
print("路径组合-选择父节点下所有子节点的某个属性:", result)

正则表达式提取

在Python中,用 re 模块来进行表达式的操作。

函数作用
re.search(“正则表达式”, str)用于从文本中提取字符串
re.findall(“正则表达式”, str)用于从文本中提取一个或多个字符串,返回的是一个list列表,包含所有匹配到的字符串

应用

# -*- coding:utf-8 -*-
# @File:test_regular_expression.py
# @Date:2025/5/22 18:55
# @Author:wayne
# @description:正则表达式提取文本
import retext = 'result(["username":"tester", "password":"123456" , "token":"6c598762f156457345d2102a6edce274"])'
pattern = '"token":"(.*?)"'   # (.*?)是个万能的正则表达式,Jmeter的正则表达式提取也可以使用
match = re.search(pattern, text)
print(match)
# 要通过match的group()方法取出来
print(match.group(0))  # 取出全部匹配的字符串:"token":"6c598762f156457345d2102a6edce274"
print(match.group(1))  # 取出匹配的正则部分的字符串:6c598762f156457345d2102a6edce274text = "There are many kinds of apples,white apple,red apple,green apple." \"White apple sell $1.12 per.Red apple sell $1.25 per.Green apple sells $0.99 per"
pattern = r'\d+\.\d{2}'
match_list = re.findall(pattern, text)
print(match_list)  # ['1.12', '1.25', '0.99']
# for match in match_list:
#     print(match)

字符串切片

字符串切片用到 split() 函数,split()函数返回的是一个list列表,用法:
split(‘分隔符号’, num)[index],其中num指切片次数,index取结果列表的下标(索引)

应用

# -*- coding:utf-8 -*-
# @File:test_str_split.py
# @Date:2025/5/22 19:51
# @Author:wayne
# @description:字符串切片data = '''result({"name": "Alice","age": 25,"email": "alice@example.com","address": {"street": "456 Elm Street","city": "Los Angeles","country": "USA"},"hobbies": ["reading", "traveling", "cooking"],"education": [{"degree": "Bachelor's","major": "Software Engineering","university": "ABC University","year": 2018},{"degree": "Master's","major": "Computer Science","university": "BCD University","year": 2019},{"degree": "Doctor's","major": "Business Administration","university": "XYZ University","year": 2020}],"projects": [{"name": "Project A","description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.","contributors": ["John", "Sarah", "Mike"],"completed": "true"},{"name": "Project B","description": "Nulla vel sagittis elit. Vivamus auctor massa in lacinia pellentesque.","contributors": ["Alice", "David"],"completed": "false"}],"is-active": "true"
})'''# data_list = data.split('(')
# print(data_list)
# data1 = data_list[1]
# print(data1)
# data2 = data1[:-1]
# print(data2)data = data.split("(")[1][:-1]   # [1]:取第2个元素,[:-1]:去掉最后一个字符
print(data)

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

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

相关文章

《大模型开源与闭源的深度博弈:科技新生态下的权衡与抉择》

开源智能体大模型的核心魅力,在于它构建起了一个全球开发者共同参与的超级协作网络。想象一下,来自世界各个角落的开发者、研究者,无论身处繁华都市还是偏远小镇,只要心怀对技术的热爱与追求,就能加入到这场技术狂欢中…

【每日一题丨2025年5.12~5.18】排序相关题

个人主页:Guiat 归属专栏:每日一题 文章目录 1. 【5.12】P1068 [NOIP 2009 普及组] 分数线划定2. 【5.13】P5143 攀爬者3. 【5.14】P12366 [蓝桥杯 2022 省 Python B] 数位排序4. 【5.15】P10901 [蓝桥杯 2024 省 C] 封闭图形个数5.【5.16】P12165 [蓝桥…

522UART是什么

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种常见的串行通信协议,用于设备间的低速数据传输。它采用异步通信方式,无需时钟信号同步,仅需两根数据线(TX发送、R…

养生攻略:五步打造健康生活

一、饮食:均衡膳食,轻养为先 遵循 “4321 饮食法则”:每餐 4 拳蔬菜、3 拳主食(杂粮占 1/2)、2 拳蛋白质、1 勺健康脂肪。早餐推荐菠菜鸡蛋卷饼配无糖豆浆,午餐选择糙米饭、清蒸鲈鱼、蒜蓉西兰花&#xff…

Ubuntu+Docker+内网穿透:保姆级教程实现安卓开发环境远程部署

文章目录 前言1. 虚拟化环境检查2. Android 模拟器部署3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问小结 6. 固定Cpolar公网地址7. 固定地址访问 前言 本文将详细介绍一种创新性的云开发架构:基于Ubuntu系统构建Android仿真容器环境,并集成安全隧道技…

第六届电子通讯与人工智能国际学术会议(ICECAI 2025)

在数字化浪潮中,电子通讯与人工智能的融合正悄然重塑世界的运行逻辑。技术基础的共生关系是这场变革的核心——电子通讯如同“信息高速公路”,通过5G等高速传输技术,将海量数据实时输送至AI系统,使其能够像人类神经系统般快速响应…

解决 Tailwind CSS 代码冗余问题

解决 Tailwind CSS 代码冗余问题 Tailwind CSS 确实可能导致 HTML 类名过长和冗余的问题,以下是几种有效的解决方案: 1. 使用 apply 指令提取重复样式 /* 在CSS文件中 */ .btn {apply px-4 py-2 rounded-md font-medium; }.card {apply p-6 bg-white …

pytorch-lightning1.7.0 old init 错误解决

在 /usr/local/anaconda3/envs/pcd117/lib/python3.9/site-packages/pytorch_lightning/utilities/data.py 500多行处修改下面这个方法 contextmanager def _replace_init_method(base_cls: Type, store_explicit_arg: Optional[str] None) -> Generator[None, None, No…

List介绍

什么是List 在集合框架中,List是一个接口,继承自Collection Collection也是一个接口,该接口中规范了后序容器中常用的一些方法 Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的,具体如下&#xff1…

STM32之模数转换器(ADC)

一、模数转换的原理与应用 一般在电子线路中,信号分为两种:模拟信号 数字信号,大多数传感器采集的都是模拟信号,比如温度、湿度、压力....... ,传感器把采集的模拟信号转为数字信号,再转交给计算机进行处…

luckysheet的使用——17.将表格作为pdf下载到本地

luckysheet源码里面自带有打印按钮,但是功能是无法使用的,所以我把该功能重写了一遍 1.在menuButton.js文件中找到源码打印按钮的触发事件: $("#luckysheet-icon-print").click(function () {}2.使用自己写的挂载方法 window.pr…

云原生+大数据

虚拟化: 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提…

微信小游戏流量主广告自动化浏览功能案例5

功能需求: 支持APP单行文本框输入1个小程序链接,在“文件传输助手”界面发送小程序链接并进入。 主要有“文章列表首页”和“文章内容”页面。每个页面支持点击弹窗广告、槽位广告、视频广告入口、视频广告内第三方广告。 弹窗广告、槽位广告、视频广…

线上 Linux 环境 MySQL 磁盘 IO 高负载深度排查与性能优化实战

目录 一、线上告警 二、问题诊断 1. 系统层面排查 2. 数据库层面分析 三、参数调优 1. sync_binlog 参数优化 2. innodb_flush_log_at_trx_commit 参数调整 四、其他优化建议 1. 日志文件位置调整 2. 生产环境核心参数配置模板 3. 突发 IO 高负载应急响应方案 五、…

【git进阶】git rebase(变基)

文章目录 合并分支提交信息修改合并提交记录时间问题1时间问题2时间问题3git rebase有很多用武之地,我一一道来 合并分支 当多人协作同一个分支时,在提交我们自己版本之前,我们会先用git pull获取远端最新的版本。但是 git pull = git fetch + git mergegit merge是一个非…

上位机知识篇---keil IDE操作

文章目录 前言文件操作按键新建打开保存保存所有编辑操作按键撤销恢复复制粘贴剪切全选查找书签操作按键添加书签跳转到上一个书签跳转到下一个书签清空所有书签编译操作按键编译当前文件构建目标文件重新构建调试操作按键进入调试模式复位全速运行停止运行单步调试逐行调试跳出…

代码随想录算法训练营 Day49 图论Ⅰ 深度优先与广度优先

图论 基础 图的概念 图的概念 概念清单有向图 (a)无向图 (b)有向/无向如图 a 所示每条边有指向如图 b 所示每条边没有箭头指向权值每条边的权值每条边的权值度-有几条边连到该节点 (eg V 2 V_2 V2​ 度为 3)入度/出度出度:从该节点出发的边个数入度:…

Windows在PowerShell或CMD运行 curl 命令报错 解决办法 (zx)

解决 zx 8.x 不稳定的问题 在 Windows 上使用 zx 8.x 时可能会遇到不稳定的问题,建议降级到 7.x 版本。可以通过以下命令进行降级: pnpm remove zx pnpm add zx7 -D解决 PowerShell 不识别 curl 参数的问题 在 Windows 上,PowerShell 默认将…

WPF···

设置启动页 默认最后一个窗口关闭,程序退出,可以设置 修改窗体的icon图标 修改项目exe图标 双击项目名会看到代码 其他 在A窗体点击按钮打开B窗体,在B窗体设置WindowStartupLocation=“CenterOwner” 在A窗体的代码设置 B.Owner = this; B.Show(); B窗体生成在A窗体中间…

【IP101】图像修复技术精解:从传统插值到深度生成修复的算法演进

图像修复技术详解 🎨 图像修复就像是数字世界的"修复匠"!通过各种"修复技术",我们可以让受损的图像重获新生,就像修复匠修复破损的艺术品一样。让我们一起来探索这个神奇的图像"修复工作室"吧&…