解析python中的jsonpath 提取器
jsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。本文给大家介绍python的jsonpath 提取器,感兴趣的朋友跟随小编一起看看吧
目录
为什么要用jsonpath
jsonpath的语法
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 提取器的文章就介绍到这了
原文链接:https://www.cnblogs.com/zcjbky/p/15816552.html