解析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实现子类调用父类的方法
Nov 10 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
python实现简单socket通信的方法
Apr 19 Python
如何高效使用Python字典的方法详解
Aug 31 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
django session完成状态保持的方法
Nov 27 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
浅析PyTorch中nn.Module的使用
Aug 18 Python
使用Python实现Wake On Lan远程开机功能
Jan 22 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 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中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
Javascript简单实现可拖动的div
2013/10/22 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
AngularJS语法详解
2015/01/23 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
express express-session的使用小结
2018/12/12 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
Python实现合并字典的方法
2015/07/07 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
Python读取YAML文件过程详解
2019/12/30 Python
Python decimal模块使用方法详解
2020/06/08 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
求职自荐书范文
2013/12/04 职场文书
新三好学生主要事迹
2014/01/23 职场文书
高二地理教学反思
2014/01/24 职场文书
企业总经理岗位职责
2014/02/13 职场文书
暑假打工感想
2015/08/07 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
PHP中->和=>的意思
2021/03/31 PHP
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Python音乐爬虫完美绕过反爬
2021/08/30 Python