关键词:
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自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
好文推荐
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
学会这4个表达「万能公式」,下次向领导汇报时不再语无伦次
工作多年后的人都明白,在职场上想要升职加薪,光工作做的好是远远不够的很多时候,讲的好比做的好更重要毕竟老板眼中你的表现=工作成果*汇报技巧如何把自己做过的事,得出的分析结论,清楚明白... 查看详情
一款python神器解决自动化图表配色(代码片段)
一款Python神器解决自动化图表配色1.提取图片中的配色1.1主色调1.2配色方案2.配色方案与可视化我们在利用Python进行数据可视化时,有着大量的高质量库可以用,比如:Matplotlib、seaborn、Plotly、Bokeh、ggplot等等。但图表... 查看详情
当你在更新某条数据时,怎么用sql语句锁定而不让别人同时更新?请知道的说下。谢谢了
当你在更新某条数据时,怎么用SQL语句锁定而不让别人同时更新?请知道的说下。谢谢了参考技术A你更新的时候,你更新的数据上本身就加了排他锁的,在你更新的这段时间其他人无法再修改数据。或者还有别的操作后再释放这... 查看详情
nlp神器!newspaper一个能下载38种语言新闻文章的python模块
Newspaper是一个很棒的python库,用于提取和整理文章。它有以下的优点:多线程文章下载框架识别新闻网址从html提取文本从html提取顶部图像从html提取所有图像从文本中提取关键字自动提取摘要自动提取作者自动提取Google... 查看详情
查错神器——对拍
对拍是个好东西。对拍是个好东西。对拍是个好东西。当你苦苦找题解,却找不出自己代码哪里错,而OJ不给数据的时候——当你灵光一闪,givebirthtoanewproblem的时候,却不知自己打的标程是否有误的时候——当你比... 查看详情
小白神器-一篇博客学会html
小白神器-一篇博客学会HTML一.简介 1.HTML定义 htypertextmarkuplanguage 即超文本标记语言。 超文本:就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。 标记语言:标记(标签)构成的语... 查看详情
学会这个大屏神器,低代码开发高端可视化大屏不在话下
文末有福利,你不会失望的随着企业数字化建设的迅速发展,各行各业都开始注重数据的价值,数据分析和可视化展现的需求日益增长。对于管理层来说,可视化大屏尤其受欢迎和重视。一方面大屏项目能够全面... 查看详情
当你真的学会databinding后,你会发现“这玩意真香”!(代码片段)
前言🏀DataBinding只是一种工具,用来解决View和数据之间的绑定。DataBinding,顾名思义:数据绑定,它可以将布局页面中的组件和应用中的数据进行绑定,支持单向绑定和双向绑定,单向绑定就是如果数... 查看详情
小白神器-一篇博客学会css
一.简介 1.css定义 CSS是CascadingStyleSheets的简称,中文称为层叠样式表。 属性和属性值用冒号隔开,以分号结尾。 2.四种引入方式 1.行内式 ... 查看详情
如何在使用 python 从 mysql 数据库中获取数据时提取整数值
】如何在使用python从mysql数据库中获取数据时提取整数值【英文标题】:howdoiextractintegervaluesinfetchingdatafrommysqldatabaseusingpython【发布时间】:2021-09-1603:17:36【问题描述】:mycursor=mydb.cursor()sql="selectelectricityBalancefromusers"mycursor.execute... 查看详情
在 Python 中从 JSON 字符串中提取数据时出错(使用 Redshift)
】在Python中从JSON字符串中提取数据时出错(使用Redshift)【英文标题】:ErrorwhenextractdatafromJSONstringinPython(usingRedshift)【发布时间】:2018-10-1807:14:19【问题描述】:我正在尝试使用Python中的SQL从JSON字符串中提取数据。我收到一个... 查看详情
使用python从图像中提取对象
...公室或家庭的性质)等。你知道任何python库或模块来完成这项工作吗?如果你能链接我本工作的教程或说明类似的示例项目【问题讨论】:【参考方案1】: 查看详情
数据分析学习方向
...元组等)、变量、循环、函数等等知识,当然我们还需要学会如何用Python库实现网页爬虫。然后我们给大家讲讲数据存取。要想做好数据存取需要学习SQL语言。一般来说,在应对万以内的数据的时候,Excel对于一般的分析没有问... 查看详情
office时间管理简装本
当你觉得思维敏捷且精力旺盛时,先做最重要的工作(要事第一)如果你这个星期很忙,就别翻开桌上的期刊和杂志,最好是把这些都摆到一边去告诉平常会打电话给你的人,你这星期很忙,无法跟他们闲聊,并跟他们说有空你... 查看详情
通过python从netCDF中提取数据
】通过python从netCDF中提取数据【英文标题】:ExtractingdatafromnetCDFbypython【发布时间】:2018-01-1620:26:02【问题描述】:我是使用Python的新手,也是NetCDF的新手,如果我不清楚,请道歉。我有一个包含多个变量的nc文件,我需要以新... 查看详情
csswordpresswysiwygedito输出的html标签和类列表。当你发现mor时,请随意添加(代码片段)
csswordpresswysiwygedito输出的html标签和类列表。当你发现mor时,请随意添加(代码片段)
保姆级教程10张图学会抓包神器fiddler小白都会系列(代码片段)
对于前端开发或者软件测试工作来说,抓包是最基本的工作技能了,fiddler作为http/https协议抓包工具,是一款非常强大的工具,非常推荐大家使用。(文末有作者笔记分享)抓包的目的1.抓取数pc或者手机数据包,... 查看详情