jmespath库解析json
在测试过程中,经常会去JSON中的某个值,jmespath可以是除了jsonpath的另外一种选择.
下面通过几个例子来说明jmespath在python的使用
jmespath python安装
非常简单直接pip,
pip install jmespath
查询一个key值
source={"a": "foo", "b": "bar", "c": "baz"}result = jmespath.search("a",source)print(result)
subexpression
类似于jsonpath,通过.来表示路径的层级
source_1={"a": {"b": {"c": {"d": "value"}}}}sub_result = jmespath.search("a.b.c",source_1)print(sub_result)
这个例子的结果为:{'d': 'value'}
index expressions
index expression主要使用在数组上
source_2 = ["a", "b", "c", "d", "e", "f"]index_result = jmespath.search("[1]",source_2)print(index_result)
这个例子的结果为:b
多个表达式综合使用
以上几种表达式可以合起来一期使用:
composite_exp = "a.b.c[0].d[1][0]"source_3= {"a": { "b": { "c": [ {"d": [0, [1, 2]]}, {"d": [3, 4]} ] }}}
composite_result = jmespath.search(composite_exp,source_3)print(composite_result)
这个例子的结果为1
Slicing 切片
slicing 和python本身的slicing比较像,
source_4=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]slicing_exp = "[0:5]"slicing_result = jmespath.search(slicing_exp,source_4)print(slicing_result)
这个例子的结果为: [0, 1, 2, 3, 4]
slicing实际上和python自己的机制基本一样,同样这个也是主要给数组使用.
有一点需要记住,基本的slicing的格式其实是: [start:stop:step]
基本上把网站上例子试了一下,总体感觉功能是相当强大.
# {"data": {
# "yesterday": {"date": "17日星期四", "high": "高温 31℃", "fx": "东南风", "low": "低温 22℃", "fl": "<![CDATA[<3级]]>",
# "type": "多云"},
# "city": "北京",
# "aqi": "91",
# "forecast": [
# {"date": "18日星期五", "high": "高温 28℃", "fengli": "<![CDATA[<3级]]>", "low": "低温 22℃", "fengxiang": "东北风",
# "type": "多云"},
# {"date": "19日星期六", "high": "高温 29℃", "fengli": "<![CDATA[<3级]]>", "low": "低温 22℃", "fengxiang": "东风",
# "type": "雷阵雨"},
# {"date": "20日星期天", "high": "高温 29℃", "fengli": "<![CDATA[<3级]]>", "low": "低温 23℃", "fengxiang": "东南风",
# "type": "阴"},
# {"date": "21日星期一", "high": "高温 30℃", "fengli": "<![CDATA[<3级]]>", "low": "低温 24℃", "fengxiang": "西南风",
# "type": "晴"},
# {"date": "22日星期二", "high": "高温 29℃", "fengli": "<![CDATA[<3级]]>", "low": "低温 24℃", "fengxiang": "北风",
# "type": "雷阵雨"}
# ],
# "ganmao": "各项气象条件适宜,无明显降温过程,发生感冒机率较低。", "wendu": "25"
# },
# "status": 1000,
# "desc": "OK"}
j = JMESPathExtractor()
j_1 = j.extract(query='data.forecast[1].date', body=res.text)
j_2 = j.extract(query='data.ganmao', body=res.text)
print(j_1, j_2)
# 结果:
# 19日星期六 各项气象条件适宜,无明显降温过程,发生感冒机率较低。
jmespath库解析json的更多相关文章
- 使用QtScript库解析Json数组例子
本文转载自:http://blog.sina.com.cn/s/blog_671732440100uwxh.html 使用qtscipt库解析json数组首先在工程文件中加 QT += ...
- 使用cJSON库解析JSON
cJSON库的下载 cJSON是一个基于C的JSON解析库,这个库非常简单,只有cJSON.c和cJSON.h两个文件,支持JSON的解析和封装,需要调用时,只需要#include "cJS ...
- SpringMVC Jackson 库解析 json 串属性名大小写自动转换问题
问题描述 在项目开发中,当实体类和表中定义的某个字段为 RMBPrice,首字母是大写的,sql 查询出来的列名也是大写的 RMBPrice,但是使用 jquery 的 ajax 返回请求响应时却出错 ...
- Oracle 使用GSON库解析复杂json串
在前文中讲到了如何使用JSON标准库解析json串,参考: Oracle解析复杂json的方法(转) 现补充一篇使用GSON库在Oracle中解析复杂json的方法. GSON串的使用教程参考官方文档 ...
- 使用cJSON库解析和构建JSON字符串
使用cJSON库解析和构建JSON字符串 前言 其实之前的两篇博文已经介绍了json格式和如何使用cJSON库来解析JSON: 使用cJSON库解析JSON JSON简介 当时在MCU平台上使用时,会 ...
- iOS5系统API和5个开源库的JSON解析速度测试
iOS5系统API和5个开源库的JSON解析速度测试 iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件. 我们选择的测试对 ...
- 使用c#解析json库
写了个c#版的json解析库,提供了json到hashtable以及hashtable到json字符串的转换 受惠于c#的语法特性,hashtable到json的解析变得非常简单 先判断传入的obje ...
- 两种库解析、构造 JSON
1.用CJSON库 1.1解析Json 需要解析的JSON文件: { "name":"Tsybius", , "sex_is_male":t ...
- golang使用simplejson库解析复杂json
cnblogs原创 golang自带的json解析库encoding/json提供了json字符串到json对象的相互转换,在json字符串比较简单的情况下还是挺好用的,但是当json字符串比较复杂或 ...
随机推荐
- Hdu 4778 Gems Fight! (状态压缩 + DP)
题目链接: Hdu 4778 Gems Fight! 题目描述: 就是有G种颜色,B个背包,每个背包有n个宝石,颜色分别为c1,c2............两个人轮流取背包放到公共容器里面,容器里面有 ...
- 498 Diagonal Traverse 对角线遍历
详见:https://leetcode.com/problems/diagonal-traverse/description/ C++: class Solution { public: vector ...
- RHEL 7.2 源码安装Python 3.6.2报错
报错代码:zipimport.ZipImportError: can't decompress data; zlib not available 一条命令解决:yum install zlib-dev ...
- 【转】PowerManager 与 WakeLock
PowerManager 与 WakeLock PowerManager 用来控制设备的电源状态. 而PowerManager.WakeLock 也称作唤醒锁, 是一种保持 CPU 运转防止设备休眠的 ...
- 来,一起梳理下Android响应点击事件的方法
一.设置setOnClickListener 这应该是最原始的方法了吧,来,先上代码: 布局文件: <Button android:id="@+id/button1" and ...
- 关于php的问题
$polling_items = db_fetch_assoc("SELECT * FROM poller_item WHERE rrd_next_step<=0 ORDER by h ...
- Vue 组件 data为什么是函数
在创建或注册模板的时候,传入一个data属性作为用来绑定的数据.但是在组件中,data必须是一个函数,而不能直接把一个对象赋值给它. Vue.component('my-component', { t ...
- 洛谷 P1021 邮票面值设计
题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之间的每一个邮资值都能得到 ...
- 洛谷 P1955 程序自动分析
题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变 ...
- 计数器:counter
组成:2属性,1方法 属性1: counter-reset 命名 属性2: counter-increment 启动/自增 方法 : counter()/counters() 调用方法 1.计数器 命 ...