一、什么是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 详解相关推荐

  1. python接入excel_使用python将excel数据导入数据库过程详解

    因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...

  2. JSON数据构造及解析详解

    JSON数据构造及解析详解 1.JSON格式数据长啥样? 2.JSON简介 JSON(Javascript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和 ...

  3. python处理表格数据教程_代码详解:使用Python从不同表格中提取数据

    常用的表格数据存储文件格式--CSV,Microsoft Excel,Google Excel . Python通常称为粘合语言.这个名称归因于人们逐渐开发出的大量接口库和特征,也得益于广泛的使用和良 ...

  4. python 读取json转为docx_python 将json数据提取转化为txt的方法

    python3 如何把一个txt文件转换成json数据,txt包含前言 今天拿到一个传感器信号文件,txt格式,有十几行,每行是一组json格式数据,有两个字段(键):'series'和'id',共4 ...

  5. python在统计专业的应用_Python统计学一数据的概括性度量详解

    一.数据的概括性度量 1.统计学概括: 统计学是应用数学的一个分支,主要通过利用概率论建立数学模型,收集所观察系统的数据,进行量化的分析.总结,并进而进行推断和预测,为相关决策提供依据和参考.统计学主 ...

  6. 离散度计算公式 python_Python统计学一数据的概括性度量详解

    一.数据的概括性度量 1.统计学概括: 统计学是应用数学的一个分支,主要通过利用概率论建立数学模型,收集所观察系统的数据,进行量化的分析.总结,并进而进行推断和预测,为相关决策提供依据和参考.统计学主 ...

  7. 当你学会这项python数据提取神器时,请做好升职准备!

    Jsonpath 详解 一.什么是 jsonpath ● JsonPath 是一种信息抽取类库,是从 JSON 文档中抽取指定信息的工具,提供多种语言实现版本,包括:JavaScript.Python ...

  8. Python pprint | 超级好用的Python库,漂亮的打印,让json数据提取体验更好

    文章目录 一.简介 二.实践案例 三.总结 一.简介 在实践 PythonPythonPython 爬虫的时候,大家肯定碰到过返回的结果是json字符串格式的数据. 关于 json 数据的详解可以学习 ...

  9. 推荐一款接口自动化测试数据提取神器 JSonPath

    参考:https://cloud.tencent.com/developer/article/1838573?from=article.detail.1846104 在开发自定义校验规则库或者常规的接 ...

最新文章

  1. flask的客户端服务端
  2. python解析并读取PDF文件:函数总结
  3. centos卸载linux里面mysql,熟悉linux-mysql的安装与卸载(centos)
  4. 计算机基础说课 word,计算机基础说课稿
  5. 第7章:图像的平滑处理
  6. Effective C# 原则48:了解更多的工具和资源(译)
  7. bootstrap中分页、面包屑导航、列表组、卡片、下拉菜单、折叠
  8. seminar by Moshe Vardi from Rice University
  9. eclipse中新建JSP文件时的编码设置
  10. 浅谈C#托管程序中的资源释放问题 (转载)
  11. 《JavaScript 学习指南》
  12. windows系统下帧率获取工具--fraps
  13. android x5 浏览器教程,064-腾讯的X5WebView内嵌浏览器引擎的使用
  14. 翰文付费打印后还有水印吗_翰文进度计划编制系统去除水印中文增强版
  15. ADA本月上涨100%,背后或有三个原因
  16. [MRCTF2020]你传你马呢
  17. 网站流量模型(1)介绍
  18. 创业者2012必看十大文章(10)
  19. php整型的最大值,php整型(Integer)
  20. 基于协同过滤的推荐系统

热门文章

  1. html制作好看展开列表框,css实现漂亮的下拉菜单,简单方便实用
  2. linux 基础命令(ps、kill、vim、grep等)
  3. 计算机中我的云文档在哪儿里,保存到云文档的文件存在哪里了?是自己的电脑硬盘还是WPS的服务器里?...
  4. 关于python桑葚图的一些实现
  5. centos 6.5 安装、配置redis
  6. Java编程思想第4版 第13章 课后习题
  7. Spring MVC执行流程及原理
  8. 怎么截取一个图片的指定尺寸?
  9. SQL Loader使用方法
  10. 教你如何把模糊老旧照片修复成高清照片,一款照片高清修复工具