解析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程序设计入门(1)基本语法简介
Jun 13 Python
浅析Python中的序列化存储的方法
Apr 28 Python
python创建和删除目录的方法
Apr 29 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
Python实现针对中文排序的方法
May 09 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
Django密码系统实现过程详解
Jul 19 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
Django如何创作一个简单的最小程序
May 12 Python
用python实现监控视频人数统计
May 21 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
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
解析javascript 浏览器关闭事件
2013/07/08 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
红米手机抢购的js代码
2014/03/10 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
Python进行数据科学工作的简单入门教程
2015/04/01 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
python中eval与int的区别浅析
2019/08/11 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
应聘美工求职信
2013/11/07 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
国家助学金感谢信
2015/01/21 职场文书
鸟的天堂导游词
2015/01/31 职场文书
地球一小时活动总结
2015/02/27 职场文书
廉政承诺书2015
2015/04/28 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
基于Redis过期事件实现订单超时取消
2021/05/08 Redis