使用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中已有类型的对象(反序列化?) 反序列 ...
随机推荐
- ext TreePanel树节点操作
1.全部展开 tree.expandAll();2.全部收缩 tree.collapseAll();3.得到父节点 node.parentNode4.判断是否有父节点 node.parentNode= ...
- css 设置overflow:scroll 滚动条的样式
/* 定义滚动条样式 */ ::-webkit-scrollbar { width: 6px; height: 6px; background-color: rgba(240, 240, 240, 1 ...
- element-ui DatePicker 日期选择器 让结束日期大于开始日期
element-ui DatePicker 日期选择器 <el-date-picker v-model="addForm.startDate" type="dat ...
- TLS之殇如何把我逼上绝望
1.协议的形式化分析,前提是弄清楚协议结构和协议参与者之间的会话交互,以及会话之间使用的加解密算法,签名算法,认证算法,等牵扯的算法.之后便是将要分析的协议部分进行抽象化,具体抽象涉及协议参与者(发起 ...
- 中文论文-LaTex模板
\documentclass[10pt,UTF8]{article} \usepackage{ctex} \usepackage{amssymb,amsmath,multicol,titlesec} ...
- Java学习笔记——第3篇
面向对象 结构化程序的任何一个结构都具有唯一的入口和唯一的出口,并且程序不会出现死循环. 虽然Java是面向对象的,但Java的方法里则是一种结构化的程序流. 面向对象的基本思想:类.对象.继承.封装 ...
- Goodbye Microservices: From 100s of problem children to 1 superstar
https://segment.com/blog/goodbye-microservices/ Unless you’ve been living under a rock, you probably ...
- de4dot FAQ
How to deobfuscate but make sure metadata tokens stay the same? --preserve-tokens will preserve all ...
- 《ABCD组》实验十一 团队作业7:团队项目设计完善&编码
<ABCD组>实验十一 团队作业7:团队项目设计完善&编码 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...
- 云计算(3)-what is new in today's Cloud
What is new in today's Cloud Four features new in today's Clouds 如果一个problem有以上4个features里面的一个或者多个,则 ...