python 下 json 数据提取神器 jsonpath 详解
一、什么是jsonpath
- JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript、Python、PHP 和 Java。
二、特点
- 只能提取json格式的数据
- 提取后的数据类型与原数据类型一致
三、安装
pip install jsonpath
四、常用原字符
原字符 | 描述 |
---|---|
$ | 表示根元素 |
@ | 当前元素 |
. or [] | 子元素 |
… | 递归搜索(不管当前路径,搜索符合条件的数据) |
* | 通配符,表示所有的元素 |
[] | 子元素操作符 |
[,] | 支持迭代器中做多选,多个key用逗号隔开 |
[start:end:step] | 数组分割操作,等同于切片 |
?() | 应用过滤表示式 |
五、常用元字符使用
测试数据
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}]
六、过滤表达式
原字符 | 描述 |
---|---|
== | 等于符号,但数字1不等于字符1 |
!= | 不等于符号 |
< | 小于符号 |
<= | 小于等于符号 |
> | 大于 |
>= | 大于等于符号 |
=~ | 判断是否符合正则表达式,例如[?(@.name =~ /foo.*?/i)] |
in | 所属符号:[?(@.name in[‘张二’,‘张三’])] |
not in | 排除符号:[?(@.name not in [‘张二’,‘张三’])] |
&& | 逻辑AND,用于合并多个过滤器表达式 |
II | 逻辑OR,用于组合多个过滤器表达式 |
七、过滤表达式使用
==:等于
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}]
python 下 json 数据提取神器 jsonpath 详解相关推荐
- python接入excel_使用python将excel数据导入数据库过程详解
因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...
- JSON数据构造及解析详解
JSON数据构造及解析详解 1.JSON格式数据长啥样? 2.JSON简介 JSON(Javascript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和 ...
- python处理表格数据教程_代码详解:使用Python从不同表格中提取数据
常用的表格数据存储文件格式--CSV,Microsoft Excel,Google Excel . Python通常称为粘合语言.这个名称归因于人们逐渐开发出的大量接口库和特征,也得益于广泛的使用和良 ...
- python 读取json转为docx_python 将json数据提取转化为txt的方法
python3 如何把一个txt文件转换成json数据,txt包含前言 今天拿到一个传感器信号文件,txt格式,有十几行,每行是一组json格式数据,有两个字段(键):'series'和'id',共4 ...
- python在统计专业的应用_Python统计学一数据的概括性度量详解
一.数据的概括性度量 1.统计学概括: 统计学是应用数学的一个分支,主要通过利用概率论建立数学模型,收集所观察系统的数据,进行量化的分析.总结,并进而进行推断和预测,为相关决策提供依据和参考.统计学主 ...
- 离散度计算公式 python_Python统计学一数据的概括性度量详解
一.数据的概括性度量 1.统计学概括: 统计学是应用数学的一个分支,主要通过利用概率论建立数学模型,收集所观察系统的数据,进行量化的分析.总结,并进而进行推断和预测,为相关决策提供依据和参考.统计学主 ...
- 当你学会这项python数据提取神器时,请做好升职准备!
Jsonpath 详解 一.什么是 jsonpath ● JsonPath 是一种信息抽取类库,是从 JSON 文档中抽取指定信息的工具,提供多种语言实现版本,包括:JavaScript.Python ...
- Python pprint | 超级好用的Python库,漂亮的打印,让json数据提取体验更好
文章目录 一.简介 二.实践案例 三.总结 一.简介 在实践 PythonPythonPython 爬虫的时候,大家肯定碰到过返回的结果是json字符串格式的数据. 关于 json 数据的详解可以学习 ...
- 推荐一款接口自动化测试数据提取神器 JSonPath
参考:https://cloud.tencent.com/developer/article/1838573?from=article.detail.1846104 在开发自定义校验规则库或者常规的接 ...
最新文章
- flask的客户端服务端
- python解析并读取PDF文件:函数总结
- centos卸载linux里面mysql,熟悉linux-mysql的安装与卸载(centos)
- 计算机基础说课 word,计算机基础说课稿
- 第7章:图像的平滑处理
- Effective C# 原则48:了解更多的工具和资源(译)
- bootstrap中分页、面包屑导航、列表组、卡片、下拉菜单、折叠
- seminar by Moshe Vardi from Rice University
- eclipse中新建JSP文件时的编码设置
- 浅谈C#托管程序中的资源释放问题 (转载)
- 《JavaScript 学习指南》
- windows系统下帧率获取工具--fraps
- android x5 浏览器教程,064-腾讯的X5WebView内嵌浏览器引擎的使用
- 翰文付费打印后还有水印吗_翰文进度计划编制系统去除水印中文增强版
- ADA本月上涨100%,背后或有三个原因
- [MRCTF2020]你传你马呢
- 网站流量模型(1)介绍
- 创业者2012必看十大文章(10)
- php整型的最大值,php整型(Integer)
- 基于协同过滤的推荐系统
热门文章
- html制作好看展开列表框,css实现漂亮的下拉菜单,简单方便实用
- linux 基础命令(ps、kill、vim、grep等)
- 计算机中我的云文档在哪儿里,保存到云文档的文件存在哪里了?是自己的电脑硬盘还是WPS的服务器里?...
- 关于python桑葚图的一些实现
- centos 6.5 安装、配置redis
- Java编程思想第4版 第13章 课后习题
- Spring MVC执行流程及原理
- 怎么截取一个图片的指定尺寸?
- SQL Loader使用方法
- 教你如何把模糊老旧照片修复成高清照片,一款照片高清修复工具