解析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 smallseg分词用法实例分析
May 28 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
Python登录注册验证功能实现
Jun 18 Python
解决PyCharm import torch包失败的问题
Oct 13 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
python将字母转化为数字实例方法
Oct 04 Python
python飞机大战pygame游戏框架搭建操作详解
Dec 17 Python
Python 面向对象部分知识点小结
Mar 09 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
Python  lambda匿名函数和三元运算符
Apr 19 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
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
15个小时----从修改程序到自己些程序
2006/10/09 PHP
PHP在不同页面间传递Json数据示例代码
2013/06/08 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
2014/07/01 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
php函数连续调用实例分析
2015/07/30 PHP
Yii中srbac权限扩展模块工作原理与用法分析
2016/07/14 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
酒店保安领班职务说明书
2014/03/04 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
英文推荐信格式范文
2014/05/09 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS