美文网首页
Python-jmespath学习

Python-jmespath学习

作者: 冲锋丘丘人 | 来源:发表于2021-07-28 10:36 被阅读0次
过滤器-指定字段等于number整数

官方文档介绍的是指定字段等于string字符串status=="running",但是实际上我遇到的数据是number整数类型,如下data数据就是接口返回的数据,我想筛选exchange_type==13的数据,刚开始是这么写的[?exchange_type==13],也试了[?exchange_type=='13'],结果是报错或者是数据为空。
正确的写法是"data.exchange_config_list[?exchange_type==`13`]",注意不是单引号也不是双引号。

过滤器-比较指定字段

[?already_exchange_num<most_exchange_num]

import jmespath, json

data = {"code": 200, "data": {"base_rsp": {"ret": 0, "rsp_msg": "", "seq": 0}, "exchange_config_list": [
    {"already_exchange_num": 1, "exchange_id": 30217, "exchange_type": 13, "expired_day": 0, "fragments_num": 1,
     "fragments_type": 1, "most_exchange_num": 1, "weight": 10000},
    {"already_exchange_num": 485, "exchange_id": 90124, "exchange_type": 1, "expired_day": 10, "fragments_num": 3,
     "fragments_type": 2, "most_exchange_num": 99999, "weight": 999},
    {"already_exchange_num": 0, "exchange_id": 30174, "exchange_type": 13, "expired_day": 0, "fragments_num": 6570,
     "fragments_type": 1, "most_exchange_num": 2, "weight": 1}]}, "elapsed_time": 7, "message": "请求成功", "ret": 0}

#过滤器,注意语法,同时使用number是需要``符号,官方文档用的是字符串
a = jmespath.search("data.exchange_config_list[?exchange_type==`1`]", data)
aa = jmespath.search("data.exchange_config_list[?exchange_type==`1` && weight==`1`]", data)  #多条件过滤
#比较两个字段值的大小
b = jmespath.search("[?already_exchange_num<most_exchange_num]", a)
#jmespath内置方法,注意上下两个写法,返回一个对象or一个列表
d = jmespath.search("[min_by(@, &fragments_num)]", b)

数字作为key值,keys和values方法取字典的键值

import jmespath
my_list = {
    "code": 200,
    "data": {
        "base_rsp": {
            "ret": 0,
            "rsp_msg": "",
            "seq": 0
        },
        "uid_follow_status_map": {
            "17230530": 1
        }
    },
    "elapsed_time": 9,
    "message": "\u8bf7\u6c42\u6210\u529f",
    "ret": 0
}

print(jmespath.search('data.uid_follow_status_map."17230530"', my_list))  #数字作为键值,需要用双引号,且单引号在外边
print(jmespath.search('values(data.uid_follow_status_map)|[0]', my_list))  #取字典的key或者value值,使用values方法和keys方法

##输出
1
1

管道符|语法

jmespath.search('values(data.uid_follow_status_map)|[0]', my_list) #取列表第n个值

反转列表

httprunner项目使用jmespath提取字段,但是不完全支持,存在以下问题

  • 表达式不能格式化传参:body.data.bbs_id_list[?exchange_type={}].formmat(type)

现在又多了一个问题

  • 不支持负数列表切片取后面的数,如body.data.bbs_id_list[-1],这个在httprunner执行提取不了数据,在Python执行环境时正常的。
    可以用reverse方法进行列表反转
print(jmespath.search('data.bbs_id_list[]', data))
print(jmespath.search('reverse(data.bbs_id_list[])', data))
print(jmespath.search('reverse(data.bbs_id_list[])|[0]', data))

相关文章

  • Python-jmespath学习

    过滤器-指定字段等于number整数 官方文档介绍的是指定字段等于string字符串status=="runnin...

  • 学习学习学习

    第三天了,连续三天,早上睁眼开始,看视频,做课件,连续作业,直到晚上十二点才睡觉。吃饭不规律,想起来就吃,感觉不饿...

  • 学习学习学习

    23岁的我,才真正明白,什么是学习,什么是努力,努力和不努力真的不同,就好比同样是一篇稿子,我用一周背下来,有的人...

  • 学习学习学习!

    妈妈总是让我学习,我只能用装当办法。 方法一: 方法二: 方法三: 方法四: ...

  • 学习学习学习

    001.今天看财富自由之路看了第二遍,而且看了一半,算是完成任务很开心。中间有想放弃的念头,坚持看完。眼睛痛,一直...

  • 学习学习学习

    马自达为什么坚持高压缩比自吸

  • 学习!学习!学习!

    学习的痛苦是暂时的 没有学到的痛苦是永恒的 因为学习而特别充实的一天 很踏实 ~~~~ 2015.11.28.阴天...

  • 学习!学习!学习!

    无数次想要去逃离,可这封闭的世界根本出不去。你没有什么可以抛弃、只能咬着牙带着面具微笑的活下去。 没有那个人、他也...

  • 学习学习学习!

    昨天和今天两个上午,都在学习新媒体运营,学习的过程中心里只有一个想法:这也太套路,太功利了吧。可真应了那句话...

  • 学习,学习,学习!

    近期学习重点有两个方面,一方面是把上一个阶段定下任务的几本书读完,并在读的过程中有输出和转化,让阅读和学习真正能有...

网友评论

      本文标题:Python-jmespath学习

      本文链接:https://www.haomeiwen.com/subject/nynomltx.html