推荐一款Python接口自动化测试数据提取分析神器!
1、引言
在处理JSON数据时,我们常常需要提取、筛选或者变换数据。手动编写这些操作的代码不仅繁琐,而且容易出错。Python作为一个功能强大的编程语言,拥有丰富的库和工具来处理这些数据。今天,将介绍一个实用的Python库——JMESPath,它为提取JSON数据提供了简洁而强大的语法。
2、JMESPath介绍
Jmespath(JSON Messaging Path)是一种用于查询和转换JSON数据的查询语言,专为JSON数据设计。它允许开发者使用简洁的表达式来提取、筛选和转换JSON数据中的元素,使得开发者能够轻松地提取JSON数据中的元素,并执行各种转换操作。与XPath类似,JMESPath的语法直观易懂,学习成本较低。
3、JMESPath安装
在使用Python Jmespath之前,需要先通过pip安装该库:
pip install jmespath
4、JMESPath用途
JMESPath在Python中的用途广泛,尤其适用于以下场景:
- 接口自动化测试:在测试API接口时,经常需要从响应的JSON数据中提取待验证的字段值。使用JMESPath,可以轻松编写查询表达式,快速定位并提取所需数据。
- 数据处理与分析:在处理和分析大量JSON数据时,JMESPath可以帮助开发者快速筛选和转换数据,提高数据处理效率。
- 日志分析与监控:在日志管理和监控系统中,JSON格式的日志数据非常常见。使用JMESPath,可以轻松从日志数据中提取关键信息,实现实时监控和告警。
5、JMESPath的特性
JMESPath具有以下特性:
- 声明式语法:JMESPath使用声明式语法,使得表达式易于阅读和编写,通过点(.)和方括号([])操作符即可轻松访问JSON对象中的属性和数组元素。
- 强大的功能:支持多种运算符、函数和语法结构,可以处理各种复杂的数据结构。
- 跨语言跨平台支持:JMESPath不仅支持Python,还有其他编程语言的实现,如JavaScript、Java等。
- 可扩展性:可以自定义函数,以满足特定的数据处理需求。
6、使用示例
假设有以下JSON数据:
{
  "name": "张三",
  "age": 26,
  "grade": {
    "Chinese": 96,
    "Math": 99
  },
  "records": [
    {"Chinese": 95, "Math": 100},
    {"Chinese": 98, "Math": 98}
  ]
}
使用Jmespath提取name和records中的第一个元素:
import jmespath  
data = {
  "name": "张三",
  "age": 26,
  "grade": {
    "Chinese": 96,
    "Math": 99
  },
  "records": [
    {"Chinese": 95, "Math": 100},
    {"Chinese": 98, "Math": 98}
  ]
}  
search_name = 'name'
res_name = jmespath.search(search_name, data)
print(res_name)  # 输出: 张三  
search_records = 'records[0]'
res_records = jmespath.search(search_records, data)
print(res_records)  # 输出: {'Chinese': 95, 'Math': 100}
使用切片和通配符提取所有学生的名字:
import jmespath  
data = {
  "students": [
    {"name": "Alice", "age": 20},
    {"name": "Bob", "age": 22},
    {"name": "Charlie", "age": 21}
  ]
}  
search_names = 'students[*].name'
res_names = jmespath.search(search_names, data)
print(res_names)  # 输出: ['Alice', 'Bob', 'Charlie']
使用管道符将多个查询操作串联起来,如先筛选出年龄大于21的学生,然后提取他们的名字:
import jmespath  
data = {
  "students": [
    {"name": "Alice", "age": 20},
    {"name": "Bob", "age": 22},
    {"name": "Charlie", "age": 21}
  ]
}  
search_expr = 'students[?age > `21`].name'
res_filtered_names = jmespath.search(search_expr, data)
print(res_filtered_names)  # 输出: ['Bob']
7、结论
Python Jmespath库为处理JSON数据提供了一种简洁而强大的解决方案。其简洁的语法、强大的功能以及跨平台的支持使得它成为处理复杂JSON数据的理想选择。无论是接口自动化测试、数据处理还是数据分析,JMESPath都能发挥重要作用。
通过上述内容的学习,希望能够帮助大家更好地理解和使用Jmespath库,从而更高效地处理JSON数据。
推荐一款Python接口自动化测试数据提取分析神器!的更多相关文章
- python接口自动化12-案例分析(csrfToken)【转载】
		前言: 有些网站的登录方式跟前面讲的博客园和token登录会不一样,把csrfToken放到cookie里,登录前后cookie是没有任何变化的,这种情况下如何绕过前端的验证码登录呢? 一.登录前后对 ... 
- python接口自动化-参数化
		原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ... 
- python接口自动化 -参数关联(一)
		原文地址https://www.cnblogs.com/yoyoketang/p/6886610.html 原文地址https://www.cnblogs.com/yoyoketang/ 原文地址ht ... 
- python接口自动化5-Json数据处理
		前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ... 
- python接口自动化23-token参数关联登录(登录拉勾网)
		前言 登录网站的时候,经常会遇到传token参数,token关联并不难,难的是找出服务器第一次返回token的值所在的位置,取出来后就可以动态关联了 登录拉勾网 1.先找到登录首页https://pa ... 
- python接口自动化10-token登录
		前言 有些登录不是用cookie来验证的,是用token参数来判断是否登录. token传参有两种一种是放在请求头里,本质上是跟cookie是一样的,只是换个单词而已:另外一种是在url请求参数里,这 ... 
- python接口自动化8-参数化
		前言 前面一篇实现了参数的关联,那种只是记流水账的完成功能,不便于维护,也没什么可读性,接下来这篇可以把每一个动作写成一个函数,这样更方便了. 参数化的思维只需记住一点:不要写死 (由于博客园登录机制 ... 
- python接口自动化7-参数关联
		前言 我们用自动化发帖之后,要想接着对这篇帖子操作,那就需要用参数关联了,发帖之后会有一个帖子的id,获取到这个id,继续操作传这个帖子id就可以了 (博客园的登录机制已经变了,不能用账号和密码登录了 ... 
- python接口自动化11-post传data参数案例
		前言: 前面登录博客园的是传json参数,有些登录不是传json的,如jenkins的登录,本篇以jenkins登录为案例,传data参数. 一.登录jenkins抓包 1.登录jenkins,输入账 ... 
- Python接口自动化——soap协议传参的类型是ns0类型的要创建工厂方法纪要
		1:在Python接口自动化中,对于soap协议的xml的请求我们可以使用Suds Client来实现,其soap协议传参的类型基本上是有2种: 第一种是传参,不需要再创建啥, 第二种就是ns0类型的 ... 
随机推荐
- 使用docker 5分钟搭建一个博客(mysql+WordPress)
			目录 一.系统环境 二.前言 三.搭建博客 3.1 创建wordpress和mysql容器 3.2 在wordpress界面设置个人博客信息 3.3 WordPress容器创建命令的简化版本 一.系统 ... 
- .NET下免费开源的PDF类库(PDFSharp)
			前言 目前.NET 体系下常见的PDF类库有Aspose.QuestPDF.Spire.iTextSharp等,有一说一都挺好用的,我个人特别喜欢QuestPDF它基于 C# Fluent API 提 ... 
- CSS——组合选择器
			1.后代选择器(包括儿子和孙子) .c1 .c2{ color: red; } 2.子代选择器(只选择儿子) .c3 > .c5{ color: red; } 3.与选择器 选择p标签下面的.c ... 
- nginx优化实践与验证
			nginx优化实践 实践场景1: 单台nginx 2核4G 实践场景2: 三台nginx 2核4G 压测工具:WRK 初始安装的nginx压测: yum install -y nginx 安装WRK压 ... 
- 算法金 | 详解过拟合和欠拟合!性感妩媚 VS 大杀四方
			大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今天我们来战 过拟合和欠拟合,特别是令江湖侠客闻风丧胆的 过拟合,简称过儿, Emmm ... 
- openstack   nova   报错
			openstack compute service list The server is currently unavailable. Please try again at a later time ... 
- Centos Stream 10 测试版下载:未来的RHEL10&Rocky Linux 10
			简介 最近发现Centos最放出了Stream 10 测试版本,应该是基于Fedora 40构建的.未来红帽会基于此版本构建RHEL 10. 内核版本:6.9.0 Python版本:3.12.2 RH ... 
- 基于Vue的二进制时钟组件 -- fx67llBinaryClock
			fx67llClock Easy & Good Clock ! npm 组件说明 一个基于Vue的二进制时钟组件,没什么卵用,做着好玩,可以方便您装饰个人主页 使用步骤 npm install ... 
- CSP-S2023 题解
			CSP-S 2023 题解 密码锁 发现总状态数只有 \(10^5\) 个,枚举 \(O(n)\) 暴力判断即可,复杂度 \(O(10^5 n)\). 或者每一个状态只对应了 \(81\) 个状态,枚 ... 
- Ubuntu 上使能 SELinux
			首发公号:Rand_cs 此文档说明如何在 ubuntu 上启用 SELinux,测试环境为虚拟机,开始前一定一定一定先来个快照,不要问我为什么有三个一定. 卸载 apparmor(可选) ubunt ... 
