我们在做接口自动化时,一般接口响应的都是json数据体,对响应数据进行提取使用或断言,当数据量很大或层级很深时,就会变得很麻烦,于是就可以用到jsonpath模块,解决json路径深取值难的问题。

一、 jsonpath介绍

用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

官网文档http://goessner.net/articles/JsonPath

二、安装使用

pip install jsonpath

import jsonpath

jp=jsonpath.jsonpath(response, '$..key_name')

“$”表示最外层的{},“..”表示模糊匹配,输出结果是list,当传入不存在的key_name时,程序会返回false

三、JsonPath与Xpath语法对比

Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法

四、案例

案例1:
import jsonpathjson_data1={"error_code": 0,"stu_info": [{"id": 1001,"name": "橙汁","sex": "女","age": 33,"addr": "上海市浦东新区城南路500弄105号","grade": "天蝎座","phone": "18300000000","gold": 10896,"info":{"card":6123492929293838,"bank_name":'招商银行'}},{"id": 1002,"name": "橙子","sex": "男","age": 40,"addr": "陕西省西安市曲江新区","grade": "狮子座","phone": "18200000000","gold": 100}]
}# 获取json_data1中所有phone字段值
print(jsonpath.jsonpath(json_data1,'$..phone'))
['18300000000', '18200000000']# 获取json_data1中所有bank_name字段值
print(jsonpath.jsonpath(json_data1,'$..bank_name'))
['招商银行']# 获取json_data1中info下所有字段值
print(jsonpath.jsonpath(json_data1,'$..info.*'))
[6123492929293838, '招商银行']# 获取json_data1中stu_info中第1个元素中grade字段值
print(jsonpath.jsonpath(json_data1,'$.stu_info.[0].grade'))
['天蝎座']
# 案例2
import jsonpathjson_data2={"body": {"cityId": 605,"title": "本周行情聚焦","weekDate": "07.06-07.12","wechat": "tuboshikefu02","button": "每月专家行情解析,免费参加","reportList": [{"cityId": 605,"skuId": 13158,"skuFullName": "上海不够卖小区榜","spuId": 20130,"spuName": "上海不够卖小区榜","categoryName": "爆款报告","skuPrice": 1100,"spuType": 1,"h5Url": "https://m.2boss.cn/trade/3051420769646018571885?skuIdAlias=3051483295561809939455","reportTitle": "上海不够卖小区榜","reportUrl": "https://2boss.oss-cn-hangzhou.aliyuncs.com/dr2_banner/banner_1592899866409","reportContent": "【最新6月榜】各区最火热的小区,全新数据,那些才是真正最火的小区?各区库存去化周期排行榜。","orderTime": 1593507849000}, {"cityId": 605,"skuId": 13162,"skuFullName": "上海涨涨涨小区榜","spuId": 20134,"spuName": "上海涨涨涨小区榜","categoryName": "爆款报告","skuPrice": 1200,"spuType": 1,"h5Url": "https://m.2boss.cn/trade/3051443826783682574415?skuIdAlias=3051495335856701455454","reportTitle": "上海涨涨涨小区榜","reportUrl": "https://2boss.oss-cn-hangzhou.aliyuncs.com/dr2_banner/banner_1592900443037","reportContent": "【最新6月榜】各区最有可能上涨小区,全新数据,帮你选最能升值的小区,各区房东溢价系数排行榜。","orderTime": 1592980444000},{"id":111,"name":"橙子"}]},"resultCode": 0,"errMsg": ""
}# 获取json_data2中reportList数组的第2个值
print(jsonpath.jsonpath(json_data2, '$.body.reportList[1]'))
[{'skuId': 13162, 'spuId': 20134, 'h5Url': 'https://m.2boss.cn/trade/3051443826783682574415?skuIdAlias=3051495335856701455454', 'orderTime': 1592980444000, 'cityId': 605, 'spuType': 1, 'reportUrl': 'https://2boss.oss-cn-hangzhou.aliyuncs.com/dr2_banner/banner_1592900443037', 'reportTitle': '上海涨涨涨小区榜', 'skuFullName': '上海涨涨涨小区榜', 'categoryName': '爆款报告', 'reportContent': '【最新6月榜】各区最有可能上涨小区,全新数据,帮你选最能升值的小区,各区房东溢价系数排行榜。', 'spuName': '上海涨涨涨小区榜', 'skuPrice': 1200}]# 获取json_data2中reportList数组的所有值
print(jsonpath.jsonpath(json_data2, '$..reportList[0:]'))
[{'spuName': '上海不够卖小区榜', 'reportContent': '【最新6月榜】各区最火热的小区,全新数据,那些才是真正最火的小区?各区库存去化周期排行榜。', 'reportUrl': 'https://2boss.oss-cn-hangzhou.aliyuncs.com/dr2_banner/banner_1592899866409', 'cityId': 605, 'skuPrice': 1100, 'spuType': 1, 'h5Url': 'https://m.2boss.cn/trade/3051420769646018571885?skuIdAlias=3051483295561809939455', 'skuId': 13158, 'reportTitle': '上海不够卖小区榜', 'categoryName': '爆款报告', 'spuId': 20130, 'orderTime': 1593507849000, 'skuFullName': '上海不够卖小区榜'}, {'spuName': '上海涨涨涨小区榜', 'reportContent': '【最新6月榜】各区最有可能上涨小区,全新数据,帮你选最能升值的小区,各区房东溢价系数排行榜。', 'reportUrl': 'https://2boss.oss-cn-hangzhou.aliyuncs.com/dr2_banner/banner_1592900443037', 'cityId': 605, 'skuPrice': 1200, 'spuType': 1, 'h5Url': 'https://m.2boss.cn/trade/3051443826783682574415?skuIdAlias=3051495335856701455454', 'skuId': 13162, 'reportTitle': '上海涨涨涨小区榜', 'categoryName': '爆款报告', 'spuId': 20134, 'orderTime': 1592980444000, 'skuFullName': '上海涨涨涨小区榜'}, {'name': '橙子', 'id': 111}]# 获取json_data2中reportList数组中包含key为name的所有字段
print(jsonpath.jsonpath(json_data2, '$..reportList[?(@.name)]'))
[{'id': 111, 'name': '橙子'}]# 获取json_data2中reportList数组中skuPrice>1100的所有值
print(jsonpath.jsonpath(json_data2, '$..reportList[?(@.skuPrice>1100)]'))
[{'reportContent': '【最新6月榜】各区最有可能上涨小区,全新数据,帮你选最能升值的小区,各区房东溢价系数排行榜。', 'reportUrl': 'https://2boss.oss-cn-hangzhou.aliyuncs.com/dr2_banner/banner_1592900443037', 'categoryName': '爆款报告', 'cityId': 605, 'reportTitle': '上海涨涨涨小区榜', 'skuPrice': 1200, 'spuId': 20134, 'spuName': '上海涨涨涨小区榜', 'h5Url': 'https://m.2boss.cn/trade/3051443826783682574415?skuIdAlias=3051495335856701455454', 'spuType': 1, 'skuFullName': '上海涨涨涨小区榜', 'orderTime': 1592980444000, 'skuId': 13162}]

Python深层解析json数据之JsonPath相关推荐

  1. perl python json_Perl解析JSON数据精解

    简介: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 它基于JavaScript(Standard ECMA-262 3rd Edition - De ...

  2. python的jsonpath_python 提取json数据的jsonPath介绍及简单使用

    为什么要用jsonpath 就跟为什么要用xpath一样,jsonpath的设计灵感来源于xpath.一个强大的json数据提取工具.让用户不用编写脚本就可以提取到相应的json数据. jsonpat ...

  3. 【Python使用】Python解析JSON数据的基本方法/用MATLAB解析json格式数据

    一 JSON数据格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON建构于两种结构:json是Javascript中的对象和数组中的对象, ...

  4. Python爬虫笔记——解析json数据(以周杰伦歌单为例)及Headers

    一.Network Network能够记录浏览器的所有请求.我们最常用的是:ALL(查看全部)/XHR(仅查看XHR)/Doc(Document,第0个请求一般在这里),有时候也会看看:Img(仅查看 ...

  5. Python获取丁香园疫情数据并解析json数据

    Python获取丁香园疫情数据并解析json数据 在利用pyecharts V1.x版本,使用Map对象进行制图时,对数据格式的要求比较高,如果数据格式不正确可能达不到我们预期的效果.在我的前一篇文章 ...

  6. java解析json_JAVA解析JSON数据

    在使用第三方api的使用,有时候会从网络中获得json数据,所以说我们将如何解析json数据? 下面小编将通过以下几点来进行json的讲解 JSON (JavaScript Object Notati ...

  7. ajax写入json数据格式化,java ajax解析json数据格式化

    java ajax解析json数据格式化 [2021-02-01 23:35:58]  简介: 服务器 hadoop格式化HDFS出现错误解决办法 报错信息: host:java.net.Unknow ...

  8. 教你不编程快速解析 JSON 数据

    JSON 是一种轻量级的,不受语言约束的数据存储格式,大部分编程语言都可以解析它,并且对编程人员也十分友好.我们在进行通讯/数据交互时,非常经常用到 JSON 格式. 但是,我们在进行数据存储的时候, ...

  9. 深入分析jquery解析json数据

    我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法. JSON数据如下,是一个嵌套JSON: {"comments":[{& ...

最新文章

  1. 如何从sdcard读取文件
  2. R语言观察日志(part15)--R的缺点
  3. 解决关于登录校园网显示不在IP段的问题方案(要看注意事项哦!)
  4. php时间调用最简单的,PHP调用时间通过引用不可避免?
  5. JavaScript 中 Number
  6. 在stackoverflow上使用markdown
  7. WCF BasicHttpBinding 安全解析(1)BasicHttpBinding基本配置
  8. Jenkins教程(Windows版)
  9. Android修行手册 -初识Chip
  10. PostgreSQL中文手册
  11. 可用性设计之过载保护
  12. win8 专业版激活方法
  13. PTA每日一题-Python-身份证校验
  14. Python爬取豆瓣电影top250(附全部源码)
  15. Arduino流水灯 附电路图
  16. 域名进行实名认证需要提交什么资料?
  17. Odoo中使用的数据关系
  18. mysql 1044 42000_[故障解决]Mysql爆出ERROR 1044 (42000)的错误怎么办?
  19. Ubuntu定时开关机
  20. 揭秘团队业绩不好的原因

热门文章

  1. python分析犯罪数据_使用 SparkSQL 分析纽约市犯罪数据
  2. python flask高级编程之restful_python Flask实现restful api service
  3. python中计算如何实现_基于python如何实现计算两组数据P值
  4. mysql 读取properties_JDBC中使用Properties读取配置文件有什么用
  5. linux 监控mysql脚本_Linux系统MySQL主从同步监控shell脚本
  6. 计算机应知应会培训班,应知应会培训、测试方案(报省里)
  7. HTML+CSS+JS实现 ❤️卡通人物吃水果游戏❤️
  8. Git使用手册--超级详细,自己都看哭了
  9. windows mysql4.1安装_Windows下,MySql的安装及配置(Install and Config of MySQL in Windows)...
  10. 字符串转16进制_16、atoi-整数字符串转整数-leetcode8-中等