解析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之编写简单乘法口诀表实现代码
Feb 27 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 Python
Python3进制之间的转换代码实例
Aug 24 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
使用Pytorch训练two-head网络的操作
May 28 Python
python超详细实现完整学生成绩管理系统
Mar 17 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
通达OA公共代码 php常用检测函数
2011/12/14 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
Python高效编程技巧
2013/01/07 Python
python正则表达式之作业计算器
2016/03/18 Python
python机器学习之决策树分类详解
2017/12/20 Python
Python安装Bs4的多种方法
2020/11/28 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
单身联谊活动方案
2014/01/29 职场文书
意向书范文
2014/03/31 职场文书
小学老师寄语大全
2014/04/04 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
联谊活动总结范文
2015/05/09 职场文书
导游词之唐山景点
2019/12/18 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书