解析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正则表达式的使用范例详解
Aug 08 Python
python爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
python模块导入的细节详解
Dec 10 Python
python中的colorlog库使用详解
Jul 05 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
Jun 17 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
Oct 29 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 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
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
浅谈PHP的反射API
2017/02/26 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
优秀辅导员事迹材料
2014/02/16 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
大学生村官考核材料
2014/05/23 职场文书
工商管理本科生求职信
2014/07/13 职场文书
迎国庆演讲稿
2014/09/15 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
长征观后感
2015/06/09 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
压缩Redis里的字符串大对象操作
2021/06/23 Redis