解析python中的jsonpath 提取器

作者:黑bky 时间:2021-11-18 23:06:04 

为什么要用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,这两者之间的语法是差不多的

XpathJSONPath描述
/$跟节点
.@现行节点
/. 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

这样就可以不用管层级结构也能取值了。

来源:https://www.cnblogs.com/zcjbky/p/15816552.html

标签:python,jsonpath,提取器
0
投稿

猜你喜欢

  • Python有序查找算法之二分法实例分析

    2023-04-09 00:02:37
  • python处理大数字的方法

    2022-06-09 02:19:03
  • mysql limit 分页的用法及注意要点

    2024-01-21 06:44:50
  • SQL 将一列拆分成多列的三种方法

    2024-01-23 15:30:18
  • Python常见异常类型处理

    2021-12-30 03:09:01
  • python如何基于redis实现ip代理池

    2022-11-05 20:49:08
  • 如何解决在Azure上部署Sqlserver网络访问不了

    2024-01-14 07:47:38
  • Ie6不支持max的解决办法

    2008-12-31 13:11:00
  • 在Python中使用mechanize模块模拟浏览器功能

    2022-04-12 10:13:56
  • 详解Python 模拟实现生产者消费者模式的实例

    2022-04-17 10:35:51
  • javascript 网站常用的iframe分割

    2023-08-19 09:27:58
  • python用Tkinter做自己的中文代码编辑器

    2023-08-12 05:32:33
  • MySQL回表查询与索引覆盖的区别

    2024-01-21 03:27:37
  • Python Pandas常用函数方法总结

    2022-11-19 05:18:31
  • CSS样式和JavaScript脚本是否放置于外部文件的探讨

    2008-08-08 12:39:00
  • Python如何使用opencv进行手势识别详解

    2021-11-06 07:12:23
  • php curl选项列表(超详细)

    2023-07-18 15:19:32
  • Pyside2中嵌入Matplotlib的绘图的实现

    2021-09-15 22:34:03
  • Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题

    2024-01-22 04:07:47
  • PyCharm中鼠标悬停在函数上时显示函数和帮助的解决方法

    2023-08-10 19:20:02
  • asp之家 网络编程 m.aspxhome.com