使用jsonpath解析多层嵌套的json响应信息
Python自带的json库可以把请求转为字典格式, 但在多层嵌套的字典中取值往往要进行多次循环遍历才能取到相应的数据, 如:
res_dict = {
"code": 0,
"msg": "成功",
"data": {
"users": [
{"name": "张三", "gender": "male", "age": 12},
{"name": "李四", "gender": "female", "age": 15},
{"name": "王五", "gender": "male", "age": 22},
{"name": "赵六", "gender": "male", "age": 24},
],
"goods": [
{"name": "apple", "price": 15, "num": 200},
{"name": "pear", "price": 18, "num": 100},
{"name": "banana", "price": 16, "num": 210},
]
}
}
- 获取所有用户名?
- 如果users是动态的(有可能是users123,或users567)怎么获取下面的数据?
- 怎么快说获取年龄大于20的用户?
这种类型的操作用字典遍历往往就麻烦的多, 特别是遇到动态节点更是无从下手
jsonpath则可以很好的解决这个问题。
主要特点
- 支持路径及*模糊匹配
- 支持索引和类似切片功能
- 支持表达式筛选
jsonpath安装
pip install jsonpath
jsonpath基本语法
jsonpath使用示例
from jsonpath import jsonpath
res_dict = {
"code": 0,
"msg": "成功",
"data": {
"users": [
{"name": "张三", "gender": "male", "age": 12},
{"name": "李四", "gender": "female", "age": 15},
{"name": "王五", "gender": "male", "age": 22},
{"name": "赵六", "gender": "male", "age": 24},
],
"goods": [
{"name": "apple", "price": 15, "num": 200},
{"name": "pear", "price": 18, "num": 100},
{"name": "banana", "price": 16, "num": 210},
]
}
}
# 匹配结果为一个列表, 无结果返回False
# 1. 逐级取值, 可使用*代表任意节点 .. 表示任意路径
print(jsonpath(res_dict, "$.msg"))
print(jsonpath(res_dict, "$.data.*")) # data下的任意节点(users/goods)下的数据
print(jsonpath(res_dict, "$.data..[2]") # 任意节点(包含users和goods)下的第3个
print(jsonpath(res_dict, "$..users[*].name"))
# 2. 索引和切片
print(jsonpath(res_dict, "$.data.users[2]")) # 第三个数据
print(jsonpath(res_dict, "$.data.users[0:2]")) # 前两条数据
# 表达式
print(jsonpath(res_dict, "$..users[?(@.gender=='female')]")) # 支持和当前数据中的字段比较
更多学习资料请加添加作者微信:lockingfree获取
使用jsonpath解析多层嵌套的json响应信息的更多相关文章
- python中jsonpath模块,解析多层嵌套的json数据
1. jsonpath介绍用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, ...
- js解析多层嵌套的json,取出所有父元素属性和遍历所有子元素
已知一个多层嵌套的json,取出所有父元素和子元素的id值 思路:因为不知道到底嵌套了多少层,递归有可能造成栈溢出.查询时间特别久的问题 所以先查询一次,判断是否有子节点,如果有,取出子节点并到父节点 ...
- 【Java_Spring】java解析多层嵌套json字符串
java解析多层嵌套json字符串
- 多层嵌套的json数据
很多时候我们见到的json数据都是多层嵌套的,就像下面这般: {"name":"桔子桑", "sex":"男", , & ...
- 接口自动化多层嵌套的json数据处理
最近在做接口自动化测试,响应的内容大多数是多层嵌套的json数据,在对响应数据进行校验的时候,可以通过(key1.key2.key3)形式获取嵌套字典值的方法获取响应值,再和预期值比较 def get ...
- JsonPath:从多层嵌套Json中解析所需要的值
问题 应用中,常常要从嵌套的JSON串中解析出所需要的数据.通常的做法是,先将JSON转换成Map, 然后一层层地判空和解析.可使用 JsonPath 来解决这个问题. 给定一个 JSON 串如下所示 ...
- java解析多层嵌套json字符串
java分别解析下面两个json字符串 package jansonDemo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjso ...
- .net(c#)提取多层嵌套的JSON
Newtonsoft.Json.Net20.dll 下载请访问http://files.cnblogs.com/hualei/Newtonsoft.Json.Net20.rar 在.net 2.0中提 ...
- JSON的简单使用之提取多层嵌套的JSON(C#)
JSON.NET(http://json.codeplex.com/)使用来将.NET中的对象转换为JSON字符串(序列化?),或者将JSON字符串转换为.NET中已有类型的对象(反序列化?) 反序列 ...
随机推荐
- Spring Cloud Alibaba学习笔记(13) - Spring Cloud Stream的监控与异常处理
Spring Cloud Stream监控 Spring Boot Actuator组件用于暴露监控端点,很多监控工具都需要依赖该组件的监控端点实现监控.而项目集成了Stream及Actuator后也 ...
- Vue+VSCode开发环境搭建
时间2019.9月 1. 安装 nodeJS; 安装VScode 安装好nodeJS之后,默认会安装好npm 测试 nodeJS 和npm是否可以执行 node -v npm -v 1.1 VScod ...
- physdiskwrite 的简单使用
physdiskwrite 的简单使用 参考 https://m0n0.ch/wall/physdiskwrite.php 来源 https://www.cnblogs.com/EasonJim/p ...
- vue复制textarea文本域内容到粘贴板
vue实现复制内容到粘贴板 方案:找到textarea对象(input同样适用),获取焦点,选中textarea的所有内容,并调用document.execCommand("copy&q ...
- 【转】JRE和JDK的区别
用一幅图来宏观的看一下 从图中可以看出JDK包含JRE包含JVM. JDK:java development kit (java开发工具) JRE:java runtime environment ( ...
- Story of Jerry Wang's Wechat subscription account
As an SAP Techinical Ambassador,Jerry is always willing to share his SAP expertise to various social ...
- ResourceManager学习之ApplicationMaster,NodeManager管理
ApplicationMaster管理部分主要由三个服务构成,分别是ApplicationMasterLauncher.AMLivelinessMonitor和ApplicationMasterSer ...
- Android笔记(二十七) Android中的动态广播和静态广播
广播接收器注册一共有两种形式 : 静态注册和动态注册. 两者及其接收广播的区别: 1.动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低>\ ...
- 制作一个简单的部门员工知识分享的python抽取脚本
需求: 基于公司的文化和公司部门间以及员工之间的工作需求状态,或者想要了解某一些技能.专业方面的知识需求.促进并提高员工们的技能认知和技术水平. 详细代码如下: 先说一下存入csv表格的表头字段: 1 ...
- 二叉树遍历(非递归版)——python
二叉树的遍历分为广度优先遍历和深度优先遍历 广度优先遍历(breadth first traversal):又称层次遍历,从树的根节点(root)开始,从上到下从从左到右遍历整个树的节点. 深度优先遍 ...