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数据提取神器时,请做好升职准备!相关推荐

  1. Python数据提取-lxml模块

    更多python教程请到友情连接: 菜鸟教程https://www.piaodoo.com 初中毕业读什么技校 http://cntkd.net 茂名一技http://www.enechn.com p ...

  2. Python 数据可视化神器分享:pyecharts

    Python 数据可视化神器分享:pyecharts Python 数据可视化神器分享:pyecharts 我们都知道python上的一款可视化工具matplotlib,而前些阵子做一个Spark项目 ...

  3. python 下 json 数据提取神器 jsonpath 详解

    一.什么是jsonpath JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript.Python.PHP 和 Java. 二.特点 ...

  4. 学会这项python技能,就再也不怕孩子偷偷打游戏了

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:鸟哥 今天小编就带领大家来做一个防止孩子玩游戏的Python小程序. ...

  5. python网页内容提取神器lxml

    一.Xpath是什么 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML 文档中进行导航 XPath ...

  6. TuShare Pro 股票期货数据提取神器(Python)

    TuShare是一款为那些有兴趣做股票期货数据分析的人提供pandas矩阵数据的工具,是国内免费库中最好的财经数据获取接口,可获取的数据除了股票.基金.期货.债券.外汇和行业大数据外,还包括了数字货币 ...

  7. python数据可视化神器,我就服它

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  8. python数据提取和合并_用Python提取和合并Excel数据

    我有一个Excel(.xlsx)文件,大约有40个工作表.每个工作表具有相同的结构,但包含不同的数据.我想从每张表格中提取信息,并将其合并到一张表格中,每张表格中的信息一张叠一张地叠在一起.我需要从每 ...

  9. python数据提取txt到excel

    季秋廿九: 哦,第一层文件夹包含第二层很多文件夹ZK1-18,第二层的文件夹ZK1-18又包含第三层文件夹100-2等很多文件夹,第三层文件夹里面有很多后缀为 TXT的文件,现在有一个需求是将TXT文 ...

最新文章

  1. localparam和parameter的区别
  2. prometheus+grafana+pushgateway+node-exporter+consul搭建监控系统
  3. linux下的strerror和perror
  4. wxpython的sizer_wxPython BoxSizer布局
  5. 520特辑丨码神VS爱神:盘点程序员的四大男友力,你偏爱哪一种?
  6. 利用nginx集群式部署服务器中,数据同步问题
  7. 用tbody解决div在table标签里无法隐藏某些行
  8. 无线路由器网络安全设置的九种方法
  9. CSS 实现圆角梯形
  10. JavaScript思维导图
  11. 衣服不管染上什么,用这招都能洗掉!99%的人不知道!
  12. Mac配置docker镜像源
  13. 【解决】g++: error trying to exec ‘cc1plus’: execvp
  14. idea设置打开多个窗口
  15. linux下用C语言实现MP3播放器
  16. 使用Markdown制作简历
  17. STM32 串口下载hex 串口下载程序 CH340串口
  18. [车联网安全自学篇] ATTACK安全之Frida反调试检测
  19. 算法 图中求最小环路径 最小环个数 最大平均环 求简单无向图中环的个数
  20. 四川大学江安校区计算机学院照片,几张图告诉你四川大学江安校区颜值到底有多高...

热门文章

  1. 不抛出异常的swap
  2. c++ protected_java基础之——访问修饰符(private/default/protected/public)
  3. 【论文写作】JSP旅游网如何写概念设计
  4. 看似无聊的python小游戏 我却摸鱼上班玩了一下午!!
  5. python发邮件详解_用Python3发送邮件详解
  6. 标准燃料计算机准,油表显示的油耗真的准确吗?教你最准确的油耗计算方法
  7. 别乎略安身立命的基础本领
  8. Swift的控制转移语句--continue语句
  9. java基础50道编程题
  10. 最优二叉搜索树(动态规划)