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},
]
}
}
  1. 获取所有用户名?
  2. 如果users是动态的(有可能是users123,或users567)怎么获取下面的数据?
  3. 怎么快说获取年龄大于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响应信息的更多相关文章

  1. python中jsonpath模块,解析多层嵌套的json数据

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

  2. js解析多层嵌套的json,取出所有父元素属性和遍历所有子元素

    已知一个多层嵌套的json,取出所有父元素和子元素的id值 思路:因为不知道到底嵌套了多少层,递归有可能造成栈溢出.查询时间特别久的问题 所以先查询一次,判断是否有子节点,如果有,取出子节点并到父节点 ...

  3. 【Java_Spring】java解析多层嵌套json字符串

    java解析多层嵌套json字符串    

  4. 多层嵌套的json数据

    很多时候我们见到的json数据都是多层嵌套的,就像下面这般: {"name":"桔子桑", "sex":"男", , & ...

  5. 接口自动化多层嵌套的json数据处理

    最近在做接口自动化测试,响应的内容大多数是多层嵌套的json数据,在对响应数据进行校验的时候,可以通过(key1.key2.key3)形式获取嵌套字典值的方法获取响应值,再和预期值比较 def get ...

  6. JsonPath:从多层嵌套Json中解析所需要的值

    问题 应用中,常常要从嵌套的JSON串中解析出所需要的数据.通常的做法是,先将JSON转换成Map, 然后一层层地判空和解析.可使用 JsonPath 来解决这个问题. 给定一个 JSON 串如下所示 ...

  7. java解析多层嵌套json字符串

    java分别解析下面两个json字符串 package jansonDemo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjso ...

  8. .net(c#)提取多层嵌套的JSON

    Newtonsoft.Json.Net20.dll 下载请访问http://files.cnblogs.com/hualei/Newtonsoft.Json.Net20.rar 在.net 2.0中提 ...

  9. JSON的简单使用之提取多层嵌套的JSON(C#)

    JSON.NET(http://json.codeplex.com/)使用来将.NET中的对象转换为JSON字符串(序列化?),或者将JSON字符串转换为.NET中已有类型的对象(反序列化?) 反序列 ...

随机推荐

  1. shell 学习笔记1-什么是shell,shell变量

    一.介绍 1.什么是shell Shell 既是一种命令语言,又是一种程序设计语言,他在操作系统得最外层,负责直接与用户对话,把用户得输入解释个OS,并处理各类操作系统得输出结果,输出到屏幕返回个i用 ...

  2. javascript 之 扩展对象 jQuery.extend

    在JQuery的API手册中,extend方法挂载在JQuery 和 JQuery.fn两个不同的对象上,但在JQuery内部代码实现的是相同的,只是功能各不相同. 官方解释: jQuery.exte ...

  3. C# 微信消息模板 发送

    项目要用到微信提醒 ,加上调转到小程序页面,或者 指定url 用到  RestSharp.Senparc.Weixin 类库 一开始直接照着微信示例直接post进去 发现一直提示 47001  ,估计 ...

  4. java对日开发常用语(词汇)总结

    日语 英语 中文 备注 並び順(ならびじゅん) order by 排序   項目(こうもく)                         field 字段,域                    ...

  5. Git撤回已经推送(push)至远程仓库提交(commit)的版本

    背景 所以,经常会遇到已经提交远程仓库,但是又不是我想要的版本,要撤下来. 回退版本一般使用git reset,又分为: # 不删除工作空间改动代码,撤销commit,不撤销git add . git ...

  6. HTML认识一

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 加快JavaScript加载和执行效率

    JavaScript 在浏览器中的性能成为开发者所面临的最重要的可用性问题.而这个问题又因 JavaScript 的阻塞特性变的复杂,也就是说当浏览器在执行 JavaScript 代码时,不能同时做其 ...

  8. java保证多线程的执行顺序

    1. java多线程环境中,如何保证多个线程按指定的顺序执行呢? 1.1 通过thread的join方法保证多线程的顺序执行, wait是让主线程等待 比如一个main方法里面先后运行thread1, ...

  9. 开发一个简单的工具,导出github仓库所有issue列表

    Jerry有一个github仓库,专门用来存放自己的知识管理,通过一条条的issue来记录具体的知识点: https://github.com/i042416/KnowlegeRepository/i ...

  10. mysql存储过程事务

    之前在写一个存储过程的时候由于不仔细导致数据库锁死,这里反省一下. 存储过程是这样的:把数据按顺序插入三张表,如果其中任何一处出错,就把前面已经做了的操作进行回滚,存储过程里面是用事务实现的,我是这么 ...