解析python中的jsonpath 提取器


Posted in Python onJanuary 18, 2022

为什么要用jsonpath

就跟为什么要用xpath一样,jsonpath的设计灵感来源于xpath。一个强大的json数据提取工具。让用户不用编写脚本就可以提取到相应的json数据。

jsonpath的语法

jsonpath可以什么这两种模式来检索数据:
以点为分隔
$.store.book[0].title
$.store.book[0,1] #可以取到第一个和第二个book值
$.store.book[*].title #可以取到所的的book值
以中括号为分隔
$['store']['book'][0]['title']
对于输入.路径,内中路径将始终使用更通用的中括号模式。 (我猜是因为jsonpath在python中是dict,访问方式刚好是用中括号)
还支持[start:end:step]模式
"$.store.book[0:3:2].title" #和python中的range步长计算是一致的
@符号表达式:即可以用来代表长度,也可以用来代表name。
$.store.book[(@.length-1)].title #取到最后一个book的title
$.store.book[?(@.price < 10)].title #取到价格小于10的书的title

jsonpath 解析

接下来讲一个非常强大并且方便的 jsonpath 专门用于 json 解析,解决路径深的老大难问题!
先安装依赖包

pip install jsonpath

学习jsonpath 不得不提到xpath,这两者之间的语法是差不多的

Xpath JSONPath 描述
/ $ 跟节点
. @ 现行节点
/ . or [] 取子节点
.. n/a 取父节点 JsonPath不支持
// .. 相对节点 就是不管位置,选择所有符合条件的条件
  • |* |匹配所有元素节点

[] |[] |迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
&#124 |[,] |支持迭代器中做多选
[] |?() |支持过滤操作
n/a |() |支持表达式计算
() |n/a |分组,JsonPath不支持

使用示例

$是查找的根节点,传参数是python的dict 类型,当查找到的时候返回一个list结果,查找失败的时候返回 False.

import jsonpath
result = {
    "code": 0,
    "data": [
        {
            "age": 20,
            "create_time": "2021-09-15",
            "id": 1,
            "mail": "2833479@qq.com",
            "name": "yoyo",
            "sex": "M"
        },
        {
            "age": 21,
            "create_time": "2021-09-16",
            "id": 2,
            "mail": "12344@qq.com",
            "name": "yoyo111",
            "sex": "M"
        }
    ],
    "msg": "success!"
}
msg = jsonpath.jsonpath(result, '$.msg')
print(msg)   # 输出结果 ['success!']
names = jsonpath.jsonpath(result, '$..name')
print(names)   # 输出结果 ['yoyo', 'yoyo111']
no = jsonpath.jsonpath(result, '$..yoyo')
print(no)   # 找不到是结果是 False

这样就可以不用管层级结构也能取值了。

到此这篇关于python的jsonpath 提取器的文章就介绍到这了,更多相关python jsonpath 提取器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
python冒泡排序简单实现方法
Jul 09 Python
python机器学习库常用汇总
Nov 15 Python
Python读写docx文件的方法
May 08 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
Python Numpy库常见用法入门教程
Jan 16 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
Django中FilePathField字段的用法
May 21 Python
Python使用xpath实现图片爬取
Sep 16 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
Jan 18 Python
python语言中pandas字符串分割str.split()函数
Aug 05 Python
Python中如何处理常见报错
Jan 18 #Python
Python机器学习应用之工业蒸汽数据分析篇详解
用Python可视化新冠疫情数据
Python机器学习应用之基于线性判别模型的分类篇详解
68行Python代码实现带难度升级的贪吃蛇
Jan 18 #Python
如何利用Python实现n*n螺旋矩阵
Jan 18 #Python
聊聊Python String型列表求最值的问题
Jan 18 #Python
You might like
PHP图片上传类带图片显示
2006/11/25 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
基于empty函数的输出详解
2013/06/17 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
一个简单的javascript类定义例子
2009/09/12 Javascript
js opener的使用详解
2014/01/11 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
JS的数组迭代方法
2015/02/05 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
Python闭包之返回函数的函数用法示例
2018/01/27 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
django celery redis使用具体实践
2019/04/08 Python
python五子棋游戏的设计与实现
2019/06/18 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
sort命令的作用和用法
2012/11/04 面试题
保健品市场营销方案
2014/03/31 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
超市督导岗位职责
2015/04/10 职场文书
督导岗位职责范本
2015/04/10 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
javascript之Object.assign()的痛点分析
2022/03/03 Javascript