python--json、jsonpath
1、遇到一个问题:android返回的基本都是标准的json格式,当我们想要对层层嵌套的json中找到自己想要的字段并进行校验时
难道需要一层一层的解析??
2、使用jsonpath
list_3={'code':100,'result':{'nextpage':1,'page':3,'data':[{'id':111,'fid':12345,'username':'zhonghui','info':[{'id':'1_1','name':'哈哈'}]},{'id':222,'fid':56789,'username':'zhonghuih2','info':[{'id':'2_1','name':'嘿嘿'}]}]}};
#跟目录地址的写法思想一样,比如下面,根目录$下,点,找code这个字段,运行返回列表类型[100]
res_3=jsonpath.jsonpath(list_3,'$.code');
#比如下面,根目录$下,点,找result这个字段,运行返回列表类型[{'nextpage': 1, 'page': 3, 'data': '真实数据'}]
res_3=jsonpath.jsonpath(list_3,'$.result'); #比如下面,根目录$下,点,找nextpage这个字段,运行返回false,因为根目录下没有nextpage这个字段
res_3=jsonpath.jsonpath(list_3,'$.nextpage'); #那如果再加一个点,相当于再深一层路径,找nextpage,最终返回正确的[1]
#但不是加一个点就深一层?
res_3=jsonpath.jsonpath(list_3,'$..id'); #*:代表匹配所有元素节点
#比如下面。相当于匹配根节点下的所有元素,最终返回[100, {'nextpage': 1, 'page': 3, 'data': {'id': 111, 'fid': 12345, 'username': 'zhonghui'}}]
res_3=jsonpath.jsonpath(list_3,'$.*'); #[]:下标,迭代器,选择,因为选择出来的是list类型,list是可迭代类型,因此可以用[index]筛选
#比如下面,data选择出来的是一['zhonghuihong']
res_3=jsonpath.jsonpath(list_3,'$..data[0].username'); #多级筛选,data下的所有用户名,比如下面,必须要用两个点,最终结果:['zhonghuih', 'zhonghuih2']
res_3=jsonpath.jsonpath(list_3,'$..data..username'); #多级筛选,如果不同层级下都有id这个字段
# 比如下面,实际上会把子层级的id也返回回来[111, '1_1', 222, '2_1'],但是我只需要外层的id,这个还没解决
res_3=jsonpath.jsonpath(list_3,'$..data..id'); #换一个思路
#比如下面,选择第一项id,最终返回[222],如果使用循环,也能达到预期
res_3=jsonpath.jsonpath(list_3,'$..data[1].id') #还是上面
#比如下面,我多加了一个点,此时返回[222, '2_1'],说明匹配了第一项下的所有id,
#
res_3=jsonpath.jsonpath(list_3,'$..data[1]..id')
#比如最后一个,猜测运行思想:
在根目录(第一个点)下寻找data----没有找到
在根目录下一层(第二个点)寻找data----找到data,并返回data[1]
在data[1](第一个点)下寻找id-----找到了外层id
在data[1]下一层(第二个点)下寻找id----也找到了id,也一起打印出来 print(res_3);
python--json、jsonpath的更多相关文章
- python json、 pickle 、shelve 模块
json 模块 用于序列化的模块 json,用于字符串 和 python数据类型间进行转换 Json模块提供了四个功能:dumps.dump.loads.load #!/usr/bin/env pyt ...
- python json、pickle
文章部分转自:https://www.cnblogs.com/lincappu/p/8296078.html json:用于字符串和Python数据类型间进行转换pickle: 用于python特有的 ...
- python 数据提取之JSON与JsonPATH
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与 ...
- Python爬虫开发【第1篇】【Json与JsonPath】
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与 ...
- 七、数据提取之JSON与JsonPATH
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与 ...
- 【python接口自动化】- 使用json及jsonpath转换和提取数据
前言 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它可以让人们很容易的进行阅读和编写,同时也方便了机器进行解析和生成,适用于进行数据交互的场景,比如 ...
- Python | JSON 数据解析(Json & JsonPath)
一.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...
- Python之数据序列化(json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
- 【转】Python之数据序列化(json、pickle、shelve)
[转]Python之数据序列化(json.pickle.shelve) 本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型 ...
- 【python 字典、json】python字典和Json的相互转换
[python 字典.json]python字典和Json的相互转换 dump/dumps字典转换成json load/loadsjson转化成字典 dumps.loads直接输出字符 dump.lo ...
随机推荐
- python-面向对象之继承
一.继承介绍 继承是一种新建类的方式,新建的类称之为子类或者派生类,被继承的类称为父类/基类/超类 python中继承的特点: 1.子类可以遗传/重用父类的属性 2.子类可以有多个父类 3.Pytho ...
- Codeforces 1107G Vasya and Maximum Profit [单调栈]
洛谷 Codeforces 我竟然能在有生之年踩标算. 思路 首先考虑暴力:枚举左右端点直接计算. 考虑记录\(sum_x=\sum_{i=1}^x c_i\),设选\([l,r]\)时那个奇怪东西的 ...
- aview安装和使用
一.安装aalibwget https://sourceforge.net/projects/aa-project/files/latest/download?source=files --no-ch ...
- Glide高级详解—缓存与解码复用
Glide 使用简明的流式语法API,大多数情况下,可能完成图片的设置你只需要:Glide.with(activity) .load(url) .into(imageView); 默认情况下,Glid ...
- ssh 登录报错 packet_write_wait: Connection to x.x.x.x port 22: Broken pipe
问题 更新个人博客文章时遇到:Error: packet_write_wait: Connection to 192.30.253.113 port 22: Broken pipe packet_wr ...
- Confluence 6 启用和禁用 Office 连接器
如果你希望限制访问 Office 连接器的所有组件或者部分组件,你可以禁用整个插件也可以禁用插件中的某个模块. 希望启用或禁用 Office 连接器模块: 进入 > 基本配置(General ...
- Gitbush笔记
1.如果要想模拟浏览器发送get请求,就要使用Request对象,通过Request对象添加HTTP头,就可以伪装成浏览器. from urllib impor request req=request ...
- mybatis的插件分析
mybatis插件回在解析配置是通过pluginAll方法将插件添加到插件链中,然后会在sqlSessionfactory.openSession()方法中将插件链绑到executor上,在执行sql ...
- 改变html结构可以实现优先加载
我们通过一个实例来看一下: 本编程题目,完成一个混合布局的编写吧!最终效果如下图: 任务 任务1:完成顶部(top).底部(foot)宽度自适应 任务2:中间分为2两栏,其中,左侧(left)宽度为2 ...
- CentOS6.8安装MySQL5.7.20时报Curses library not found解决
报错如下: CMakeErroratcmake/readline.cmake:83(MESSAGE): Curseslibrarynotfound.Pleaseinstallappropriatepa ...