当你学会这项python数据提取神器时,请做好升职准备!
Jsonpath 详解
一、什么是 jsonpath
● JsonPath 是一种信息抽取类库,是从 JSON 文档中抽取指定信息的工具,提供多种语言实现版本,包括:JavaScript、Python、PHP 和 Java。
二、特点
● 只能提取 JSON 格式的数据
● 提取后的数据类型与原数据类型一致
三、安装
pip install jsonpath
四、常用原字符
五、常用元字符使用
● 测试数据
class_info = {"class_one": {"students": [{"name": "张一","sex": "男","age": 18,"height": 170.5},{"name": "张二","sex": "女","age": 20,"height": 160.5},{"name": "张三","sex": "男","age": 18,"height": 170.5},],"teacher": {"name": "李小二","sex": "男","age": 30,"height": 185.5,"teacher":"递归搜索测试"}
}
}
● $:根元素
import jsonpath
#获取根元素下所有数据,2种写法一样
#.的作用等同于[]表示子元素
result = jsonpath.jsonpath(class_info, '$.*')
result2 = jsonpath.jsonpath(class_info, '$[*]')
print(result)
print(result2)
输出:
[{'students': [{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}], 'teacher': {'sex': '男', 'age': 30, 'height': 185.5, 'teacher': '递归搜索测试'}}]
● . or []:子元素
import jsonpath
#.与[]作用相同后续就只写一个了
result = jsonpath.jsonpath(class_info, '$.class_one.students')
print(result)result = jsonpath.jsonpath(class_info, '$[class_one][students]')
print(result)
输出:
[[{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]]
● [,]:支持迭代器中做多选,多个 key 用逗号隔开
import jsonpath
#递归查找包含teacher 或者 name的值
# ..:表示递归查找,可以搜索到该json下所有符合条件的数据
result = jsonpath.jsonpath(class_info, '$..[teacher,name]')
print(result)
输出:
[{'sex': '男', 'age': 30, 'height': 185.5, 'teacher': '递归搜索测试'}, '张一', '张二', '张三', '递归搜索测试']#获取students下第0个和第2个元素
re = "$..students[0,2]"
result = jsonpath.jsonpath(class_info,re)
print(result)
输出:
[{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]
● [start:end:step]:数组分割操作,等同于切片 , 遵循左闭右开原则
import jsonpath
#获取前2位学生的信息,支持下标运算,类似list通过下标取值一样
result = jsonpath.jsonpath(class_info, '$.class_one.students[0:2]')
print(result)
输出:
[{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}]
● ?():应用过滤表示式
import jsonpath
#找出年龄大于18的学生
result = jsonpath.jsonpath(class_info, '$.class_one.students.[?(@.age>18)]')
print(result)
输出:[{'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}]
六、过滤表达式
七、过滤表达式使用
● ==:等于
import jsonpath
#下面几个比较的和这个一样就不写了
#找出name==张三的学生
result = "$.class_one.students.[?(@.name=='张三')]"
print(result)
输出:[{'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]
● in:所属符号
import jsonpath
#获取name等于张二或者张三
re = "$.class_one.students.[?(@.name in ['张二','张三'])]"
result = jsonpath.jsonpath(class_info,re)
print(result)
输出:
[{'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]#找出name为张二,张三的学生年龄
re = "$.class_one.students.[?(@.name in ['张二','张三'])].age"
result = jsonpath.jsonpath(class_info,re)
print(result)
输出:[20, 18]
● &&:逻辑 AND,用于合并多个过滤器表达式
import jsonpath
re = "$..students[?(@.name=='张三' && @.age==18)]"
result = jsonpath.jsonpath(class_info,re)
print(result)
输出:[{'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]
● || 逻辑 OR,用于组合多个过滤器表达式
import jsonpath
#获取name等于张三或者age等于18的学生
re = "$..students[?(@.name=='张三' || @.age==18)]"
result = jsonpath.jsonpath(class_info,re)
print(result)
输出:[{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]
● not in :排除符号
import jsonpath
#name不等于'张一','张三'的学生
re = "$..students[?(@.name not in ['张一','张三'])]"
result = jsonpath.jsonpath(class_info,re)
print(result)
输出:
[{'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}]
最后: 大家可以去我公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
好文推荐
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
面试经:一线城市搬砖!又面软件测试岗,5000就知足了…
面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…
什么样的人适合从事软件测试工作?
那个准点下班的人,比我先升职了…
测试岗反复跳槽,跳着跳着就跳没了…
当你学会这项python数据提取神器时,请做好升职准备!相关推荐
- Python数据提取-lxml模块
更多python教程请到友情连接: 菜鸟教程https://www.piaodoo.com 初中毕业读什么技校 http://cntkd.net 茂名一技http://www.enechn.com p ...
- Python 数据可视化神器分享:pyecharts
Python 数据可视化神器分享:pyecharts Python 数据可视化神器分享:pyecharts 我们都知道python上的一款可视化工具matplotlib,而前些阵子做一个Spark项目 ...
- python 下 json 数据提取神器 jsonpath 详解
一.什么是jsonpath JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript.Python.PHP 和 Java. 二.特点 ...
- 学会这项python技能,就再也不怕孩子偷偷打游戏了
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:鸟哥 今天小编就带领大家来做一个防止孩子玩游戏的Python小程序. ...
- python网页内容提取神器lxml
一.Xpath是什么 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML 文档中进行导航 XPath ...
- TuShare Pro 股票期货数据提取神器(Python)
TuShare是一款为那些有兴趣做股票期货数据分析的人提供pandas矩阵数据的工具,是国内免费库中最好的财经数据获取接口,可获取的数据除了股票.基金.期货.债券.外汇和行业大数据外,还包括了数字货币 ...
- python数据可视化神器,我就服它
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- python数据提取和合并_用Python提取和合并Excel数据
我有一个Excel(.xlsx)文件,大约有40个工作表.每个工作表具有相同的结构,但包含不同的数据.我想从每张表格中提取信息,并将其合并到一张表格中,每张表格中的信息一张叠一张地叠在一起.我需要从每 ...
- python数据提取txt到excel
季秋廿九: 哦,第一层文件夹包含第二层很多文件夹ZK1-18,第二层的文件夹ZK1-18又包含第三层文件夹100-2等很多文件夹,第三层文件夹里面有很多后缀为 TXT的文件,现在有一个需求是将TXT文 ...
最新文章
- localparam和parameter的区别
- prometheus+grafana+pushgateway+node-exporter+consul搭建监控系统
- linux下的strerror和perror
- wxpython的sizer_wxPython BoxSizer布局
- 520特辑丨码神VS爱神:盘点程序员的四大男友力,你偏爱哪一种?
- 利用nginx集群式部署服务器中,数据同步问题
- 用tbody解决div在table标签里无法隐藏某些行
- 无线路由器网络安全设置的九种方法
- CSS 实现圆角梯形
- JavaScript思维导图
- 衣服不管染上什么,用这招都能洗掉!99%的人不知道!
- Mac配置docker镜像源
- 【解决】g++: error trying to exec ‘cc1plus’: execvp
- idea设置打开多个窗口
- linux下用C语言实现MP3播放器
- 使用Markdown制作简历
- STM32 串口下载hex 串口下载程序 CH340串口
- [车联网安全自学篇] ATTACK安全之Frida反调试检测
- 算法 图中求最小环路径 最小环个数 最大平均环 求简单无向图中环的个数
- 四川大学江安校区计算机学院照片,几张图告诉你四川大学江安校区颜值到底有多高...