Requests库分享系列:
Requests库(一)
Requests库(二)
Requests库(三)如何获取接口传参参数
Requests库(四)如何传递不一样的参数
Requests库(五)接口返回状态码
Requests库(六)接口返回响应头和请求Cookies
Requests库(七)重定向和超时
Requests(八)代理和会话对象
Requests库(九)准备的请求和SSL 证书验证
Requests库(十)接口请求认证
Requests库(十一)实战请求钉钉群机器人
Requests库(十二)实战获取今日头条24小时热文
Requests库(十三)利用钉钉机器人打造一个钉钉群定时推送今日头条24小时热闻
Requests库(十四)一文揭秘如何获取快手关注的视频
Requests库(十五)一文解决解析text/html格式返回数据
Requests库(十六)一文展示如何利用Requests请求xml格式接口
Requests库(十七)一文展示如何利用Requests发送form表单请求
Requests库(十八)Requests发送application/x-www-form-urlencoded请求
前言
Requests请求返回的数据,有时候是一些简单的json,直接解决即可,但是呢,更多的时候,我们需要处理复杂的json,那么我们应该如何处理呢。这里给推荐一个优秀的json解析的利器--jsonpath
安装教程
pip install jsonpath
那么我们去官网去查看下,https://goessner.net/articles/JsonPath/
jsonpath的语法和xpath类似,如下。
Xpath | JSONPath | 描述 |
/ | $ | 跟节点 |
. | @ | 现行节点 |
/ | . or [] | 取子节点 |
.. | n/a | 取父节点 JsonPath不支持 |
// | .. | 相对节点 就是不管位置,选择所有符合条件的条件 |
* | * | 匹配所有元素节点 |
[] | [] | 迭代器标示 |
| | [,] | 支持迭代器中做多选 |
[] | ?() | 支持过滤操作 |
n/a | () | 支持表达式计算 |
() | n/a | 分组,JsonPath不支持 |
那么我们如何使用呢,接下来给大家演示下。
实际代码演示
import jsonpathd = { "error_code": 0, "data": [ { "id": 2012110112, "name": "雷子", "sex": "男", "age": 27, "addr": "北京市昌平区", "cars": [ {"car1": "京A88881"}, {"car2": "京A88882"}, ] }, { "id": 2012110113, "name": "雷子说测试开发", "sex": "男", "age": 27, "addr": "北京市昌平区", "cars": [ {"car1": "京A88885"}, {"car2": "京A88889"}, ] } ]}result=jsonpath.jsonpath(d,'$..car2') #模糊匹配print(result)result2=jsonpath.jsonpath(d,'$.data') #取到data这里的所有内容print(result2)result3 = jsonpath.jsonpath(d, '$.data[0]') #取到data里的第1个元素print(result3)result = jsonpath.jsonpath(d, '$.data[0].id') # 取到data里的第1个元素中的idprint(result)result = jsonpath.jsonpath(d, '$.data[0].beijing') # 取到data里的第1个元素中的beijingprint(result)
我们看下结果
我们可以看到,可以准确的返回我们想要取得值。如果我们查找的元素不存在,那么默认会给我们返回False。这样我们在实际的测试中就更加好判断了。
在之前的文章有分享过一个类似的,是我自己写的复杂的json处理脚本,python解析复杂的json。在实际的中我们可以根据自己的工程选择使用符合我们自己的项目的。
利用jsonpath可以解决我们实际的项目去结合使用,选一个最适合自己的项目的即可。