解析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实现2048小游戏
Mar 30 Python
利用Python进行异常值分析实例代码
Dec 07 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
Numpy中的mask的使用
Jul 21 Python
python 实现分页显示从es中获取的数据方法
Dec 26 Python
python占位符输入方式实例
May 27 Python
在python下使用tensorflow判断是否存在文件夹的实例
Jun 10 Python
python爬虫添加请求头代码实例
Dec 28 Python
Python+pyftpdlib实现局域网文件互传
Aug 24 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 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
星际争霸秘籍
2020/03/04 星际争霸
3
2006/10/09 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
php实现字符串翻转的方法
2015/03/27 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
php-msf源码详解
2017/12/25 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
python连接mysql调用存储过程示例
2014/03/05 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
python利用datetime模块计算时间差
2015/08/04 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
pycharm显示远程图片的实现
2019/11/04 Python
python pygame实现球球大作战
2019/11/25 Python
python打印异常信息的两种实现方式
2019/12/24 Python
从python读取sql的实例方法
2020/07/21 Python
python中的unittest框架实例详解
2021/02/05 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
请说出你所知道的线程同步的方法
2013/04/19 面试题
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
聘用意向书
2014/07/29 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
Python3 如何开启自带http服务
2021/05/18 Python