解析python中的jsonpath 提取器
为什么要用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不支持 |
// | .. | 相对节点 就是不管位置,选择所有符合条件的条件 |
- |* |匹配所有元素节点
[] |[] |迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
| |[,] |支持迭代器中做多选
[] |?() |支持过滤操作
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代码
本文地址:http://www.codeinn.net/misctech/206576.html