解析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 相关文章推荐
简单的Python2.7编程初学经验总结
Apr 01 Python
Python编写一个闹钟功能
Jul 11 Python
tensorflow学习笔记之简单的神经网络训练和测试
Apr 15 Python
python使用tornado实现简单爬虫
Jul 28 Python
python实现汉诺塔算法
Mar 01 Python
详解python爬虫系列之初识爬虫
Apr 06 Python
django url到views参数传递的实例
Jul 19 Python
微信公众号token验证失败解决方案
Jul 22 Python
详解pandas中MultiIndex和对象实际索引不一致问题
Jul 23 Python
Python银行系统实战源码
Oct 25 Python
python__name__原理及用法详解
Nov 02 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 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下escape解码函数的实现方法
2010/08/08 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
js 调整select 位置的函数
2008/02/21 Javascript
jQuery 开天辟地入门篇一
2009/12/09 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
javascript中this的四种用法
2015/05/11 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
Python3基础之基本运算符概述
2014/08/13 Python
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
Python中optparser库用法实例详解
2018/01/26 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
工程专业毕业生自荐信范文
2013/12/25 职场文书
十岁生日父母答谢词
2014/01/18 职场文书
2014年店长工作总结
2014/11/17 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
停电通知范文
2015/04/16 职场文书
食堂管理制度范本
2015/08/04 职场文书
八年级英语教学反思
2016/02/15 职场文书